繁体   English   中英

在WCF应用程序中使用MSMQ消息时保留消息顺序

[英]Preserve message order when consuming MSMQ messages in a WCF application

我有一个消耗来自MSMQ队列的消息的应用程序。 该应用程序使用AppFabric使用MSMQ激活IIS中托管的WCF服务。

必须保留消息的顺序。 但MSMQ是否保证保留消息顺序?

在我看来,如果我的应用程序无法处理消息,例如由于与数据库的连接断开,则消息将被移动到重试队列。 这允许应用程序从主队列接收新消息,直到原始消息从重试队列移回主队列。 在一定次数的重试间隔后,消息将被移动到毒性队列。 但是,如果应用程序处理新消息,则毒性队列处理根本不是一种选择。

因此,消息的顺序尚未保留。

我对如何处理应用程序错误的理解错了吗?

我是否可以设置绑定以便保留消息顺序,同样在消息处理暂时失败的情况下?

皮特,

经验中的一些提示:

  1. nieve是正确的,你不应该依赖于消息顺序 - 如果你有这样的情况,那么第一条消息的成功执行应该触发下一条消息,它们不应该同时在队列中发送。
  2. 对于大多数人来说,这似乎并不重要,但有一天,它可能会变得如此 - 这个应用程序将如何扩展? 如果有一天你发现自己被迫在队列的目的地放置多个工人 - 这将如何扩展到多台机器? 由于无法并行执行消息,您的模型将失败。

我强烈建议您调查Saga模式 ,这是这类问题的答案,它由NServiceBusMassTransit等产品提供,这将消除您必须直接管理MSMQ的难度。

我知道在你的情况下你可能根本没有选择而且不能“扔掉”你正在使用的模型,但是你有利于触发一条消息然后成功执行这条消息(Saga),然后你可以插入下一条消息。

我希望这有帮助,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM