首页 > 解决方案 > 按照发布的确切顺序在消费者处获取消息 - RabbitMQ - MassTransit

问题描述

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

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

标签: rabbitmqmasstransit

解决方案


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

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

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


推荐阅读