MSMQ中的事务队列可能出现乱序消息?

时间:2009-11-03 17:12:03

标签: msmq

我是消息传递的新手,有点不清楚MSMQ是否有可能为事务队列提供无序消息。我想这一定是因为如果消息没有正确处理(并且因为我们将使用多个“竞争消费者”),那么其他消费者可以继续处理消息,同时将失败的消息放回队列。似乎无法在任何地方找到黑白答案。

2 个答案:

答案 0 :(得分:4)

  • 很难找到负面的黑白答案(它们通常不存在)。
  • 你在这里混淆了两个词(我想)。交付是从发件人到队列。消费是从队列到消费者。这两个动作不能放在同一个交易中。它们是完全独立的行动(这是排队的一个点)

更重要的是:来自“Microsoft Message Queuing Services (MSMQ) Tips

  

这些消息将按照发送顺序一起发送,或者根本不发送。此外,从同一台机器发起到同一队列的连续事务将按照它们相对于彼此提交的顺序到达。

这是msmq中唯一的订单情况。

可悲的是,你找不到有关订购消费的任何信息,因为它不相关。您可以以任何方式使用msmq中的消息。

更新:如果您必须已经订购了处理,那么我没有看到使用许多消费者的原因。您必须在代码中实现订单。

答案 1 :(得分:0)

您的邮件是否需要按顺序处理,因为:

1)它们是工作流程的不同步骤?如果是这样,您应该创建不同的队列来处理不同的步骤。进程1读取队列1,执行其操作,然后写入队列2,依此类推。

2)他们有不同的优先事项?如果优先级相当粗略(并且优先级内的消息顺序无关紧要),则应创建高优先级和低优先级队列。消费者首先从优先级较高的队列中读取。

3)业务规则指定它。例如,“客户订单必须按收到的顺序处理。”消息队列不适合这种排序,因为它们只传达接收消息的顺序。定期轮询数据库以获取有序任务列表的进程更合适。