MSMQ一个(队列)到多个(侦听器)场景

Urb*_*Esc 13 .net c# msmq

我有这种情况:一个客户端将消息发送到msmq队列实例,并且有3个进程侦听此队列.我希望能够让这些实例中的每一个都选择不同的消息并进行处理.

我知道这是队列的常见使用场景,我已经使用MSMQ,.NET和C#为此工作了代码.

但是我想知道msmq是否是我最好的选择 - 文档明确指出MSMQ是用于"一对一"通信,这意味着不应该有多个监听器.

这让我感到疑惑,我正在为我的用例做正确的解决方案吗?或者反过来说,我是否必须为每个侦听器创建一个队列并在工作流的前一部分中分发消息?

将非常感谢在此类场景中演示MSMQ用法的工作示例的链接.

谢谢

Lad*_*nka 8

据我了解,您使用多个侦听器来执行负载平衡等操作.这是绝对有效的方案,它通常用于群集环境或负载平衡方案中,其中单个侦听器无法使用所有传入消息.顺便说一句.集群BizTalk以相同的方式使用MSMQ消息.

一对一意味着将一条消息传递给一个侦听器,但这并不意味着每个队列只能有一个侦听器.如果所有侦听器都执行相同的处理并且不依赖于哪个侦听器将选择该消息,则它仍然是一对一的.

也可以使用一个队列将一条消息传递给多个侦听器.MSMQ不建议使用此方案,即使技术上可以使用触发器.

如果您的侦听器只侦听具有某些特殊属性的消息,那么识别哪个侦听器应该使用该消息(即您在队列中搜索消息),则应该使用三个队列.

  • 多播是多个队列的一条消息,而不是多个侦听器. (3认同)

Joh*_*ell 5

"文件明确指出,MSMQ是用于"一对一"的沟通,这意味着不应该只有一个听众."

你有这个链接?

MSMQ使用两种传递方法:
1-1:一个发送方,一个目标队列
1-M:一个发送方组播到多个目标队列

此外,您可以在队列中拥有多个侦听器.听众的数量取决于你.当然,多个侦听器之间会存在争用,因此如果您希望仅在需要对其进行编码/配置时才处理消息.