如果我想通过EasyNetQ保留消息顺序,是否避免使用异步方法?

时间:2019-02-03 15:33:15

标签: rabbitmq easynetq

我已经在EasynetQ的文档中看到了这一点”

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

现在,这是否意味着如果要保留消息顺序,我应该避免在订户中使用异步方法(例如httpClient.SendAsync()或方法的任何异步版本)吗?

换句话说,我有message1,message2,我想先处理message1,然后再处理message2。但是,如果我的订户正在使用async / await方法,那么message1和message2可能会乱序处理。

1 个答案:

答案 0 :(得分:1)

您是正确的。另外,您可以将预取计数设置为1,即使在使用异步时,该时间也可以接收1条消息,但会增加大量的内存/ CPU开销和性能损失。

通常,我建议您将应用程序设计为不依赖于消息顺序,因为它会在很多方面损害您的可伸缩性。它可能会以其他方式再次咬你。