RocketMQ简介

244 阅读2分钟

阿里消息中间件,和rabbitMQ相比实现并发量更高,响应速度更短,和kafka相比相同量级占用资源更小。基本结构如下:

消息种类包括

** 顺序消息**: defaultMQProducer.send() 注意选择重载send,需要通过匿名内部类   MessageQueueSelector的方式,就是选择一个消息队列 

集群消息:一个消息只能被一个消费者实例所消费 

广播消息:每一条消息都会被不同消费者所消费 

延迟消息:如果是延迟消息临时存储,  根据delay service 服务去检查是否到达时间,如果到达时间就会发送到目标topic中去 临时队列为(SCHEDULE_TOPIC_XXXX)不同延迟级别会对应不同的队列序号,当延迟时间到之后由定时线程负责处理 

事务消息:消息队列 RocketMQ 版提供类似 X/Open XA 的分布式事务功能,通过消息队列 RocketMQ 事务消息能达到分布式事务的最终⼀致。

发送步骤:

  • 发送⽅将半事务消息发送⾄消息队列 RocketMQ 版服务端。 
  • 消息队列 RocketMQ 版服务端将消息持久化成功之后,向发送⽅返回 Ack 确认消息已经发送成功,此时消息为半事务消息。
  • 发送⽅开始执⾏本地事务逻辑。 
  • 发送⽅根据本地事务执⾏结果向服务端提交⼆次确认(Commit 或是 Rollback),服务端收到 Commit 状态则将半事务消息标记为可投递,订阅⽅最终将收到该消息;服务端收到 Rollback 状 态则删除半事务消息,订阅⽅将不会接受该消息。

事务消息回查步骤如下:

 1.在断⽹或者是应⽤重启的特殊情况下,上述步骤 4提交的⼆次确认最终未到达服务端,经过固定时间后服务端将对该消息发起消息回查。  2.发送⽅收到消息回查后,需要检查对应消息的本地事务执⾏的最终结果。  3.发送⽅根据检查得到的本地事务的最终状态再次提交⼆次确认,服务端仍按照步骤   4.对半事务消息进⾏操作。

拓展:DDMQ 在消息中间件前加了层代理,代理发送给缓冲区,延迟服务负责判断是否生效 ,生效放到目标topic中