消息的发送有3种形式,同步,异步,单向等

关于consumer

有pushconsumer,就是consumer写一个回调函数,borker把消息推过来()
也有pullconsuemr,就是consumer自己去broker拉数据,代码比较复杂

关于consumer group

如果一个consumer group里面的多个consumer都指向同一个topic,且有的是集群模式,有是广播模式
说实话这种问题我是没有想明白的,因为一个consumer group是标识一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。
你把消费逻辑不同的consumer放到一个consumer group里面干什么?

关于集群消费与广播消费

  • 集群消费:消费者的一种消费模式。一个Consumer Group中的各个Consumer实例分摊去消费消息,即一条消息只会投递到一个Consumer Group下面的一个实例。
  • 广播消费:消费者的一种消费模式。消息将对一个Consumer Group下的各个Consumer实例都投递一遍。即即使这些 Consumer 属于同一个Consumer Group,消息也会被Consumer Group 中的每个Consumer都消费一次。

关于顺序消息

有两个语义 分别是全局有序,和局部有序
例如用户买东西的流程中,会收到3个邮件,分别是订单已创建,订单已付款,订单已发货
有个mq,它里面就存储着待发送的邮件
现在有两个用户分别是AB
给队列里写数据的时间线是:
A订单已经创建,A订单已经付款,B订单已经创建,B订单已经付款,B订单已经发货,A订单已经发货
所谓的全局有序就是消费的时候,顺序必须是:
A订单已经创建,A订单已经付款,B订单已经创建,B订单已经付款,B订单已经发货,A订单已经发货
而局部有序就是
我只保证A的3个订单是有序的,不保证AB之间也是有序的,举例来说 下面的消费顺序是可以的
A订单已经创建,A订单已经付款,B订单已经创建,B订单已经付款,A订单已经发货,B订单已经发货
OK我们可以看到,其实绝对的全局有序是没有太大必要的
作为顺序消息,发送的时候我要保证所有的消息都发送到某个topic的同一个queue即可(使用MessageQueueSelector即可)
同时消费的时候,我保证某个时刻只有1个消费者再消费这个queue里面的数据(使用MessageListenerOrderly即可)

参考资料

​RocketMQ-顺序消息Demo及实现原理分析​

​​​RocketMQ——角色与术语详解​