点点滴滴啊

导航

 

默认情况下Rocket MQ消息是无序的,原因在于Producer 发送的消息时选择Queue使用的策略是轮询的方式,这样消息就负载到Topic的多个Queue中;在发送消息过程中,由于网络、距离等原因,到达Queue的顺序不可预测,到达Queue时,将会变成无序的,在此基础上,消费端有多个Consumer,这些Consumer消费消息是独立的,无法建立先后顺序关系。

如果将一组有序消息按照策略发送到同一个的Queue中,保证了在Queue中的消息总体有序;但这一组有序消息由于网络波动,到达Queue的时间是无序的,这一组有序消息也将会变成无序消息,需要保证这一组有序消息发送时,保证一条消息发送成功才能发送下一条消息。

Consumer选择Queue的策略将不会影响消费Queue中时的有序消息,因为Queue消费是有序的,无论Consumer怎么选择Queue,都能保证按序消费消息;如果一个Consumer消费多个Queue,多个Queue中的消息是有序的,也将不会消费端按序消费消息;如果Consumer关闭,由新的Consumer替代,只需要解决消息重复消费的问题,但是并不影响有序消费消息。

总结:实现Rocket Mq 顺序消息,Producer端需要在发送消息时保证一组有序消息发送到同一个Queue中,并且保证消息同步发送,一条消息发送成功才能发送下一条消息;消费端需要解决Consumer重启或网络波动导致的重复消费问题,但是不影响顺序消息的消费。

posted on 2021-09-30 11:11  丶点滴  阅读(348)  评论(0编辑  收藏  举报