来自RabbitMQ - Message order of delivery
AMQP 0-9-1核心规范的第4.7节解释了 保证订购的条件:发布的消息 一个频道,通过一个交换,一个队列和一个 将以与它们相同的顺序接收传出频道 发送。自2.7.0发布以来,RabbitMQ提供了更强大的保证。
这与EasyNetQ有关吗?我原以为它会持有,但我有时(但并不总是)看到不同的行为。
如果消费者是同步的(不是我的情况;我有锁定,但它在“if”之后开始,在这种情况下总是假的),我应该相信消息按照它们发布的顺序被消费吗? (相同类型的消息,相同的来源,去往同一目的地)或者EasyNetQ内部是否有其他元素可供使用,我应该知道哪些元素不保留传递的消息顺序?
答案 0 :(得分:3)
EasyNetQ为每个IBus实例实现一个消费者线程,因此如果您使用标准的非异步订阅方法,则消息处理程序将以与RabbitMQ传递消息相同的顺序同步触发。不应该实现锁定。如果您使用async subscribe,仍将按顺序调用处理程序,但当然它们可能会无序确认,具体取决于您实现异步处理程序的方式。