消息队列定义
消息队列技术是分布式应用间交换信息的一种技术
消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序取走
通过消息队列,应用程序可独立地执行,不需要直到彼此的位置或在继续执行前不需要等待接收程序接收此消息
消息队列应用场景
* 异步通信
* 解耦业务
基于消息模型,关注“通知”,而非关注“处理”
* 错峰与流控
* 广播
* 时序保证
消息队列的构成
* Broker:消息服务器,作为Server提供消息核心服务
* Producer:消息生产者,业务的发起方,负责生产消息传输给Broker
* Consumer:消息消费者,业务的处理方式,负责从Broker获取消息并进行业务逻辑处理
* Topic:主题,发布订阅模式下的消息统一汇聚地,不同生产者向Topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
* Queue:队列,P2Peye.com模式下,特定生产者向特定Queue发动消息,消费者订阅特定的Queue完成指定消息的接收
* Message:消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输
消息队列传统协议
* AMQP协议 - 应用层协议的一个开放标准,为面向消息的中间件设计
* MQTT协议 - 格式简洁、占用宽带小、移动端通信、PUAH、嵌入式系统,基于TCP的二进制协议
* STOMP协议 - 简单文本消息协议
* XMPP协议 - 基于XML的协议
* 自定义的协议 - ZeroMQ/Redis/Kafka/RocketMQ自定义二进制协议,基于TCP/IP Socket接口进行传输
高级特征设计
* 可靠投递
* 消费确认
* 重复消息和顺序消息
At Most Once
only Once
At Least Once
* 性能考虑
同步 / 异步
批量
* PUSH or PULL
RocketMQ - 用于OLTP场景,高可靠场景,如订单消息
Kafka - 用于OLAP场景,高吞吐、高可靠性可容忍场景,如日志处理 (新版Kafka已具备OLTP场景能力)
(OLAP、OLTP的介绍和比较)
(Kafka与Rocketmq的区别)
RocketMQ高可用
* 非时序消息
多个Master-Slave对
Produce多个Master
Consumer多个Slave
* 严格时序消息
单机单线程 - Master-Slave - 如果Master挂了,会发送失败,同时也不能消费
高可用如何保证?
RocketMQ交互流程 - Broker主从如何自动切换?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)