996 一年终于攒了十万存在银行卡里准备存取款,对应两个异步的短信消息,要保证先存后取:
而MQ默认发消息到不同queue显然是行不通的,会乱序。因此,需要发往同一queue,依靠其先进先出机制。
有序消息又叫顺序消息(FIFO 消息),指消息的消费顺序和产生顺序相同。
比如订单的生成、付款、发货,这串消息必须按顺序处理。 顺序消息又分为如下:
一个Topic内所有的消息都发布到同一个queue,按照FIFO顺序进行发布和消费:
性能要求不高,所有消息严格按照FIFO进行消息发布和消费的场景。
对于指定的一个Topic,所有消息按sharding key
进行区块(queue)分区,同一queue内的消息严格按FIFO发布和消费。
性能要求高,根据消息中的sharding key去决定消息发送到哪个queue。
在MQ模型中,顺序需由3个阶段去保障
RocketMQ消费端有两种类型:
底层都是通过pull机制实现,pushConsumer是一种API封装而已。
MQPullConsumer
由用户控制线程,主动从服务端获取消息,每次获取到的是一个MessageQueue
中的消息。
PullResult
中的 List msgFoundList
MQPushConsumer
由用户注册MessageListener
来消费消息,在客户端中需要保证调用MessageListener
时消息的顺序性
看源码
发送顺序消息无法利用集群的Failover特性,因为不能更换MessageQueue进行重试。
因为发送的路由策略导致的热点问题,可能某一些MessageQueue的数据量特别大