【发布时间】:2010-12-12 17:34:22
【问题描述】:
我是消息传递的新手,有点不清楚 MSMQ 是否可以为事务队列传递乱序消息。我想这一定是因为如果一条消息没有被正确处理(并且因为我们将使用多个“竞争消费者”),那么当失败的消息被放回队列时,其他消费者可以继续处理消息。只是似乎无法在任何地方找到黑白答案。
【问题讨论】:
标签: msmq
我是消息传递的新手,有点不清楚 MSMQ 是否可以为事务队列传递乱序消息。我想这一定是因为如果一条消息没有被正确处理(并且因为我们将使用多个“竞争消费者”),那么当失败的消息被放回队列时,其他消费者可以继续处理消息。只是似乎无法在任何地方找到黑白答案。
【问题讨论】:
标签: msmq
是否需要按顺序处理您的消息,因为:
1) 它们是工作流的不同步骤吗?如果是这样,您应该创建不同的队列来处理不同的步骤。进程 1 读取队列 1,执行其操作,然后写入队列 2,依此类推。
2) 他们有不同的优先级?如果优先级相当粗略(优先级中消息的顺序无关紧要),您应该创建高优先级和低优先级队列。消费者首先从更高优先级的队列中读取。
3) 业务规则指定它。例如,“客户订单必须按照收到的顺序进行处理”。消息队列不适合这种排序,因为它们只传达接收消息的顺序。定期轮询数据库以获取有序任务列表的进程会更合适。
【讨论】:
更重要的是:来自“Microsoft Message Queuing Services (MSMQ) Tips”
这些消息要么按照发送顺序一起发送,要么根本不发送。此外,从同一台机器发起到同一队列的连续事务将按照它们提交的相对顺序到达。
这是 msmq 中唯一的 order 情况。
遗憾的是,您找不到任何关于有序消费的信息,因为它不相关。您可以随意使用来自 msmq 的消息。
更新:如果您必须订购处理,那么我看不出使用许多消费者的理由。您必须在代码中实现该顺序。
【讨论】: