来自RabbitMQ - Message order of delivery
AMQP0-9-1核心规范第4.7节解释了保证排序的条件:在一个通道中发布的消息,通过一个交换、一个队列和一个传出通道的消息将按照发送的相同顺序接收。自2.7.0发行版以来,RabbitMQ提供了更强的保证。
这适用于EasyNetQ吗?我本来希望它能坚持下去的,但有时(但并不总是)我看到了一种不同的行为。
如果使用者是同步的(还不是我的情况;我有锁定,但它开始于" If“(在本例中总是为false )之后),我是否应该相信消息是按发布的顺序使用的呢?(相同类型的消息,相同的来源,去同一个目的地),还是这里有其他元素在EasyNetQ内部发挥作用,我应该知道哪些元素没有保留消息的传递顺序?
发布于 2014-06-23 08:20:06
EasyNetQ实现了每个IBus实例的单个使用者线程,因此如果您使用标准的非异步订阅方法,您的消息处理程序将按照RabbitMQ传递消息的相同顺序同步触发。不应该需要实现锁。如果您使用异步订阅,则仍将按顺序调用处理程序,但当然,根据您实现异步处理程序的方式,它们可能会出现顺序混乱。
https://stackoverflow.com/questions/24330864
复制相似问题