Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在WCF应用程序中使用MSMQ消息时保留消息顺序_.net_Wcf_Msmq - Fatal编程技术网

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

.net 在WCF应用程序中使用MSMQ消息时保留消息顺序,.net,wcf,msmq,.net,Wcf,Msmq,我有一个应用程序,它使用来自MSMQ队列的消息。应用程序使用AppFabric使用MSMQ激活托管在IIS中的WCF服务 保持消息的顺序是至关重要的。但是MSMQ能保证消息顺序得到保留吗 在我看来,如果我的应用程序无法处理消息(例如,由于与数据库的连接中断),则消息将被移动到重试队列。这允许应用程序从主队列接收新消息,直到原始消息从重试队列移回主队列。经过一定数量的重试间隔后,消息将移动到毒药队列。但是,如果应用程序处理新消息,那么毒药队列处理就不是一个选项 因此,消息的顺序没有得到保留 我对如

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

保持消息的顺序是至关重要的。但是MSMQ能保证消息顺序得到保留吗

在我看来,如果我的应用程序无法处理消息(例如,由于与数据库的连接中断),则消息将被移动到重试队列。这允许应用程序从主队列接收新消息,直到原始消息从重试队列移回主队列。经过一定数量的重试间隔后,消息将移动到毒药队列。但是,如果应用程序处理新消息,那么毒药队列处理就不是一个选项

因此,消息的顺序没有得到保留

我对如何处理应用程序错误的理解是否错误

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

Pete

经验中的一些提示:

  • nieve是正确的,您不应该依赖消息顺序-如果出现这种情况,那么成功执行第一条消息将触发下一条消息,它们不应该同时在队列中发送
  • 对于大多数人来说,这似乎并不相关,但有一天,它可能会变得如此——这个应用程序将如何扩展?如果有一天你发现自己被迫将多个工人安排在队列的目的地-这将如何扩展到多台机器?由于无法并行执行消息,您的模型将失败
  • 我强烈建议您调查,这是此类问题的答案,它由和等产品提供,这将消除直接管理MSMQ的困难,而您一直在这样做

    我理解,在您的情况下,您可能没有选择,也不能“抛弃”您正在使用的模型,但是触发一条消息,然后在成功执行此消息(Saga)后,您可以插入下一条消息,这对您更有利


    我希望这会有所帮助,

    可能的重复性并不确定您为什么希望实现这一目标。使用消息队列的想法是,如果某个命令失败,它不会停止任何其他命令/消息处理。如果我理解正确,您希望执行与此相反的操作(在故障发生时停止消息处理,直到它被排序),对吗?否则,任何后续故障都将以正确的顺序堆积在故障队列中,以便在问题得到解决后立即重试。