1

来自RabbitMQ - 消息传递顺序

AMQP 0-9-1 核心规范的第 4.7 节解释了保证排序的条件:在一个通道中发布的消息,通过一个交换和一个队列以及一个传出通道将按照它们发送的顺序被接收。自 2.7.0 版以来,RabbitMQ 提供了更强的保证。

这适用于 EasyNetQ 吗?我原以为它会保持不变,但我有时(但并非总是)会看到不同的行为。

如果消费者是同步的(还不是我的情况;我有锁定但它在“如果”之后开始,在这种情况下总是错误的),我应该相信消息按照发布的顺序被消费吗?(相同类型的消息,相同的来源,到达相同的目的地)或者 EasyNetQ 内部是否还有其他元素在起作用,我应该知道哪些不保留消息传递顺序?

4

1 回答 1

3

EasyNetQ 为每个 IBus 实例实现一个消费者线程,因此如果您使用标准的非异步订阅方法,您的消息处理程序将按照 RabbitMQ 传递消息的相同顺序同步触发。应该不需要实现锁。如果您使用异步订阅,处理程序仍将按顺序调用,但当然,根据您实现异步处理程序的方式,它们可能会乱序 ACK。

于 2014-06-23T08:20:06.810 回答