我已经看到了这EasynetQ的文档”
EasyNetQ实现每下iBus例如一个消费者线程,因此,如果您使用标准的非异步订阅方法消息处理程序将在同一顺序的消息被传递的RabbitMQ同步闪光。不应该有任何需要实现一个锁。如果使用异步认购,该处理器仍然会为了所谓的,但他们当然可以ACK出的顺序取决于你如何实现你的异步处理。
现在,这是否意味着我应该避免使用异步方法(如httpClient.SendAsync()或方法的任何异步版本),在我的用户,如果我想保留消息顺序?
换句话说,我有MESSAGE1,消息2,我要处理MESSAGE1然后消息2。但是,如果我的用户在使用异步/ await方法然后MESSAGE1和消息2可以不按顺序处理。
你是对的。此外,您可以设置预取数为1,这在使用异步即使时间拿起1个消息,但增加了很多MEM / CPU开销和性能损失。
一般来说,我会建议来设计应用程序不依赖于消息顺序,因为它将在很多方面损害您的可扩展性。而且它可能会回来咬你在其他方面。