- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在努力了解多播在 MSMQ 中的工作原理,但我根本无法接收消息,即使是来自同一台机器。我显然做错了什么,但看不到什么。
这是我所在的地方:
我手动创建了一个名为 MulticastTest
的非事务性专用队列,然后将多播地址设置为 234.1.1.1:8001
。然后我的测试发送应用程序执行此操作:
MessageQueue queue = new MessageQueue("FormatName:MULTICAST=234.1.1.1:8001");
queue.Send("Hello World");
这行得通,它至少似乎发送了我在同一台机器上的传出队列中看到的消息。至少我认为这是正确的,请告诉我是否正确。
所以现在我尝试运行我的接收应用程序(在同一台机器上或配置为相同多播地址的不同机器上),但我无法让它工作。如果我尝试这样做:
MessageQueue queue = new MessageQueue("FormatName:MULTICAST=234.1.1.1:8001");
var message = queue.Receive();
它根本行不通,Receive()
方法抛出一个异常说:
The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted
如果我尝试将接收队列设置为 .\private$\MulticastTest
它至少会等待一条消息但什么也没有发生,所有消息仍然留在传出队列中。
那我做错了什么? MSMQ 是否需要运行某种服务才能从传出队列发送消息?
我还尝试根据 this question 向匿名用户授予完全权限但这没有影响。
最佳答案
经过多次试验,我终于找到了使多播队列正常工作所需的正确步骤。
首先,确保您已经安装了 MSMQ 多播功能!尽管能够在我的其中一台服务器上创建具有多播地址的队列,但服务器管理器实际上告诉我该组件未安装。
在我的本地机器上尝试之后,我在我的事件日志中发现了这条消息:
Message Queuing found multiple IP addresses for the local computer. Message Queuing will use the default IP address determined by the PGM driver for multicast messages. To use a different IP address, set the \HKLM\Software\Microsoft\MSMQ\Parameters\MulticastBindIP registry value to one of the following valid IP addresses: [IP addresses listed here]
原来我的局域网有多个 IP 地址,所以我首先使用发送消息所需的正确 IP 地址添加了这个注册表项,然后重新启动消息队列服务。可以在此处找到更多详细信息:https://technet.microsoft.com/en-us/library/cc770813%28v=ws.10%29.aspx?f=255&MSPPError=-2147217396
接下来,我必须为 ANONYMOUS LOGON 用户向我的消息队列添加权限,因此我(至少)授予了接收和发送权限。
现在发送一些东西。您需要的队列名称的正确格式如下:
FormatName:MULTICAST=234.1.1.1:8001
或者您的多播 IP 地址/端口是什么。我的发送应用程序现在发送了消息,我可以看到它现在出现在我的私有(private)队列中,该队列与该多播地址相关联。这意味着消息肯定已经发送。
在接收端,我需要监听私有(private)队列(不是上面的组播格式),所以监听:
.\private$\MulticastTest
最后我看到我发送的消息出现在接收端。
作为健全性检查,我设置了另一个队列指向同一个多播地址(确保在那台机器上我遵循了上述相同的步骤),现在可以从一台机器发送一条消息并让多台机器接收它。
我希望这个答案对其他人有帮助,因为这对我来说是一次真正的试错。
关于c# - MSMQ - 无法从多播队列接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435706/
我刚刚和一位 Microsoft MVP 聊天,他告诉我 MSMQ 已经过时了。这是真的?那么 SOA 的基础设施是什么??? 最佳答案 好吧,他们发布了一个带有 Vista 的新版本 (4.0),它
只是想确认如何将消息发送到远程事务性消息队列。 假设我有两台机器,A 和 B。 机器 A 有一个用于接收消息的事务队列。 Windows 服务监视此队列并对数据执行某些操作(将其保存到 SQL Ser
我一直看到documentation表示不可能发送到事务范围之外的远程事务 msmq 队列。我发现这很难相信,因为我认为我已经这样做了好几个星期了。我有一个小应用程序,它将消息发布到事务性的远程队列。
我正在使用 MSMQ 传输一个 byte 数组。 格式化程序是一个 BinaryMessageFormatter。 目标队列是私有(private)队列,我正在使用直接 TCP 通信。 目标机器在不同
有人可以为我指出一些关于为队列集群设置 MSMQ 的好资源吗?我有兴趣帮助: 实际设置集群MSMQ节点,并使其运行 设置应用程序以将消息发送到集群队列。 设置应用程序(至少 2 个)以从同一个集群队列
我是消息传递的新手,有点不清楚 MSMQ 是否可以为事务队列传递乱序消息。我想这一定是因为如果一条消息没有得到正确处理(并且因为我们将使用多个“竞争消费者”),那么其他消费者可以继续处理消息,同时将失
我们使用 BizTalk Server 通过 MSMQ 发送消息。接收系统要求每条消息都将扩展属性设置为 guid(作为字节数组)。 MSDN 记录了 MSMQMessage here 的 Exten
我正在做 NServiceBus 网站 ( http://docs.particular.net/samples/step-by-step/ ) 上的示例,当我在 Visual Studio 中运行时
我们有一个基于 NServiceBus 的 Pub/Sub 系统,我们有间歇性问题,消息无限期地卡在发布者传出队列上,而不是被传输到订阅者输入队列。 注意事项: 当我们重新启动发布者服务和订阅者服务时
当您向远程队列发送消息时,会在您自己的机器上创建一个临时传出队列。这是否意味着如果您自己的机器上没有安装MSMQ,您就不能使用远程队列? 最佳答案 你是对的。如果你自己的机器上没有安装 MSMQ,你就
我正在尝试使用以下路径连接到远程私有(private) MSMQ 队列: "FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue" 我收到以下
据我从文档中看到,您应该检查消息队列中是否有消息的方法是使用 Peek 方法。然后,您依靠它失败并返回 MessageQueueException 来告诉您队列为空。 public bool
我正在尝试使用主机文件中的别名指向包含 MSMQ 的服务器。如果我在 MSMQ 路径中指定实际服务器名称,则一切正常: var queue = new MessageQueue("FormatName
是否可以直接从队列中以字符串形式读取消息(与您在计算机管理 MSC 管理单元中查看 MSMQ 消息时看到的消息正文相同),以便我可以自己将其保存到数据库中?我希望能够存储它以便稍后重播而不会丢失任何数
有没有办法清除传出队列。似乎我无法使用 MMC 管理单元完成此操作,当我尝试在代码中清除它时出现错误 Format name is invalid将消息发送到的计算机不存在,因此它们永远不会被发送,但
有一个名为 queue1 的公共(public)队列在机器 A 上。我想从机器 B 向这个队列发送消息。为了实现这一点,我编写了那个 c# 代码。 if (MessageQueue.Exists("m
是否有某种标准配置设置、服务或工具可以接受来自一个队列的消息并将其移至另一个队列?自动处理死消息问题,并提供一些重试能力?我想这就是“MSMQ 消息路由”所做的事情,但似乎找不到有关它的文档(Wind
我正在尝试创建一个 MSMQ 解决方案,对于某些消息,我希望它们仅在下午 6 点之后处理,那么 MSMQ 中是否有一种方法可以在 Future 中处理该消息? 最佳答案 队列是一种先进先出的数据结构。
我们的系统中有许多 MSMQ 队列,包括私有(private)队列和公共(public)队列。有时,从队列中读取的 Windows 服务会崩溃,因此消息会在该队列中堆积。一旦队列达到一定大小(可能是
我们在使用 NServiceBus 的负载平衡的高容量环境中遇到了 MSMQ 问题。 我们的环境如下所示: 1 F5 通过循环分配网络流量到 6 个应用服务器。这 6 个服务器中的每一个都使用一个 B
我是一名优秀的程序员,十分优秀!