按发布的确切顺序在消费者处获取消息 - RabbitMQ - MassTransit

时间:2021-06-16 09:53:50

标签: rabbitmq masstransit

我正在通过队列传递与付款相关的数据。所以我需要按照我发送的顺序在我的消费者处接收数据。

示例 - 发布者发布这些消息 - msg1、msg2、msg3...msg8。在消费者处没有按照发布的正确顺序得到它......它就像 msg1,msg4,msg2,msg7.msg8.. 所有的消息都是相同的类型.. 有没有办法在rabbitmq masstransit中处理这个?

1 个答案:

答案 0 :(得分:1)

纯粹的发布-订阅消息代理不能保证按设计排序。发布者确认和消费者确认不是有序的,因此消息可以无序发布(尽管您是按顺序进行的)和无序消费。当一条消息在有害队列中结束时,下一条消息将被处理,因此按照定义顺序被打破。

此外,RMQ 本身保证“至少一个”交付,这意味着您可以从代理中两次无序地获取相同的消息。此外,如果 RMQ 集群因网络故障而分区,队列的状态将无法正确复制,当分区状态解决时,分离的节点将重新发送其队列中的所有消息。

只有使用仅附加日志的代理才能支持有序交付。例如,您可以使用 Kafka 来实现。这就是 MassTransit 中的 Kafka 传输是作为 Rider 实现的原因,而不是由于概念上的不匹配而实现的普通消息传输。