消息队列
消息队列:先进先出的一种数据结构
功能:应用解耦、流量消峰(利用消息队列,将请求暂存请求,分散到相对较长的一段时间处理)、消息分发(一个消息可以有多个需求方)
RocketMQ
第一代Notify:推模式
第二代:拉模型
RockettMQ:长轮询的拉取方式
结构(各部分角色)
1. Producer:发信者
2. Consumer:收信者
3. Broker:负责暂存、传输的邮局。有两种odgaMaster支持读和写,Slave只支持读
4. NameServer:协调各方邮局的管理机构
消息存储
由Consumer Queue和CommitLog配合完成。
持久化
当消息通过Producer写入RockerMQ时,有两种写磁盘方式
1. 异步刷盘:返回写成功时,只是写入内存。等内存的消息量达到一定程度时,统一触发写
2. 同步刷盘:返回写成功时,消息已经同步写入磁盘。
业务场景
顺序消息
场景:保证同一个订单的消息顺序为生成、付款、发货。
1. 发送端:同一个业务ID的消息发送到同一个Message Queue。
2. 消费端:同一个Consumer Queue的消息不被并发处理
消息重复
需要使用方自己保证
方式一:消费逻辑的幂等性
方式二:维护一个记录,在消费前先查询是否已经消费过