消息中间件(一)MQ详解及四大MQ比较一、消息中间件相关知识
1、概述
消息队列已经逐渐成为企业IT系统内部通信的核心手段 。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能 , 成为异步RPC的主要手段之一 。当今市面上有很多主流的消息中间件 , 如老牌的ActiveMQ、RabbitMQ , 炙手可热的Kafka , 阿里巴巴自主开发RocketMQ等 。
2、消息中间件的组成
2.1 Broker
消息服务器 , 作为server提供消息核心服务
2.2 Producer
消息生产者 , 业务的发起方 , 负责生产消息传输给broker ,
2.3 Consumer
消息消费者 , 业务的处理方 , 负责从broker获取消息并进行业务逻辑处理
2.4 Topic
2.5 Queue
2.6 Message
消息体 , 根据不同通信协议定义的固定格式进行编码的数据包 , 来封装业务数据 , 实现消息的传输
3 消息中间件模式分类
3.1 点对点
PTP点对点:使用queue作为通信载体
说明:
消息生产者生产消息发送到queue中 , 然后消息消费者从queue中取出并且消费消息 。
消息被消费以后 , queue中不再存储 , 所以消息消费者不可能消费到已经被消费的消息 。Queue支持存在多个消费者 , 但是对一个消息而言 , 只会有一个消费者可以消费 。
说明:
queue实现了负载均衡 , 将producer生产的消息发送到消息队列中 , 由多个消费者消费 。但一个消息只能被一个消费者接受 , 当没有消费者可用时 , 这个消息会被保存直到有一个可用的消费者 。
4 消息中间件的优势
4.1 系统解耦
交互系统之间没有直接的调用关系 , 只是通过消息传输 , 故系统侵入性不强 , 耦合度低 。
4.2 提高系统响应时间
例如原来的一套逻辑 , 完成支付可能涉及先修改订单状态、计算会员积分、通知物流配送几个逻辑才能完成;通过MQ架构设计 , 就可将紧急重要(需要立刻响应)的业务放到该调用方法中 , 响应要求不高的使用消息队列 , 放到MQ队列中 , 供消费者处理 。
4.3 为大数据处理架构提供服务
通过消息作为整合 , 大数据的背景下 , 消息队列还与实时处理架构整合 , 为数据处理提供性能支持 。
4.4 Java消息服务——JMS
Java消息服务(Java Message Service , JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API , 用于在两个应用程序之间 , 或分布式系统中发送消息 , 进行异步通信 。
5 消息中间件应用场景
5.1 异步通信
有些业务不想也不需要立即处理消息 。消息队列提供了异步处理机制 , 允许用户把一个消息放入队列 , 但并不立即处理它 。想向队列中放入多少消息就放多少 , 然后在需要的时候再去处理它们 。
5.2 解耦
降低工程间的强依赖程度 , 针对异构系统进行适配 。在项目启动之初来预测将来项目会碰到什么需求 , 是极其困难的 。通过消息系统在处理过程中间插入了一个隐含的、基于数据的接口层 , 两边的处理过程都要实现这一接口 , 当应用发生变化时 , 可以独立的扩展或修改两边的处理过程 , 只要确保它们遵守同样的接口约束 。
5.3 冗余
有些情况下 , 处理数据的过程会失败 。除非数据被持久化 , 否则将造成丢失 。消息队列把数据进行持久化直到它们已经被完全处理 , 通过这一方式规避了数据丢失风险 。许多消息队列所采用的”插入-获取-删除”范式中 , 在把一个消息从队列中删除之前 , 需要你的处理系统明确的指出该消息已经被处理完毕 , 从而确保你的数据被安全的保存直到你使用完毕 。
5.4 扩展性
因为消息队列解耦了你的处理过程 , 所以增大消息入队和处理的频率是很容易的 , 只要另外增加处理过程即可 。不需要改变代码、不需要调节参数 。便于分布式扩容 。
5.5 过载保护
在访问量剧增的情况下 , 应用仍然需要继续发挥作用 , 但是这样的突发流量无法提取预知;如果以为了能处理这类瞬间峰值访问为标准来投入资源随时待命无疑是巨大的浪费 。使用消息队列能够使关键组件顶住突发的访问压力 , 而不会因为突发的超负荷的请求而完全崩溃 。
秒懂生活扩展阅读
- 广州天气台风最新消息 广州台风
- 手机qq怎么看别人撤回的消息
- 两人复合结婚的消息刷屏 范冰冰李晨宣布复合结婚
- QQ消息提醒框关闭了怎么打开
- 怎样设置QQ离线自动回复消息
- 淘宝消息未读是拉黑吗
- 林生斌事件有没有最新进展?林生斌事件最新近情况官方消息
- 微信新消息提示音不响
- 如何看全微信验证消息
- 苹果手机微信撤回的消息怎么查看