MSMQ - 无法从多播队列接收

2023-11-24

我试图了解多播在 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()方法抛出异常:

指定的格式名称不支持请求的操作。 例如,无法删除直接队列格式名称

如果我尝试将接收队列设置为.\private$\MulticastTest它至少等待消息但没有任何反应,所有消息仍然保留在传出队列中。

那么我做错了什么? MSMQ 是否需要运行某种服务才能从传出队列发送消息?

我还尝试按照以下方式向匿名用户授予完全权限这个问题但这没有影响。


经过多次实验,我终于找到了使多播队列正常工作所需的正确步骤。

首先也是最重要的,确保您已安装 MSMQ 多播功能!尽管能够在我的一台服务器上创建具有多播地址的队列,但服务器管理器实际上告诉我该组件尚未安装。

在我的本地计算机上尝试此操作后,我在事件日志中发现了此消息:

消息队列发现本地计算机有多个 IP 地址。 消息队列将使用 PGM 确定的默认 IP 地址 多播消息的驱动程序。要使用不同的 IP 地址,请设置 \HKLM\Software\Microsoft\MSMQ\Parameters\MulticastBindIP 注册表 值为以下有效 IP 地址之一:[此处列出的 IP 地址]

事实证明,我的局域网有多个 IP 地址,因此首先我使用发送消息所需的正确 IP 地址添加了此注册表项,然后重新启动消息队列服务。更多详情可在这找到:

接下来,我必须为匿名登录用户向消息队列添加权限,因此我(至少)授予了接收和发送权限。

现在要送东西了。您需要的队列名称的正确格式如下:

FormatName:MULTICAST=234.1.1.1:8001

或者无论您的多播 IP 地址/端口是什么。我的发送应用程序现在发送了消息,我可以看到它现在出现在与该多播地址绑定的私人队列中。这意味着消息肯定已经发送了。

在接收端,我需要监听私有队列(不是上面的多播格式),所以我监听:

.\private$\MulticastTest

最后我看到我发送的消息出现在接收端。

作为健全性检查,我设置了另一个指向同一多播地址的队列(确保在该机器上遵循上述相同步骤),现在可以从一台机器发送消息并让多台机器接收该消息。

我希望这个答案对其他人有帮助,因为这对我来说是一次真正的反复试验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MSMQ - 无法从多播队列接收 的相关文章

随机推荐

  • 磁盘已满时删除文件的 Shell 脚本

    如果缓存目录变得太大 我正在编写一个小脚本 每天通过 CRON 清理 Linux 上的空间 由于我对 bash 脚本编写非常陌生 因此我需要 Linux 专家的一些帮助 这是基本上的逻辑 伪代码 if Drive Space Left lt
  • 如何在 C# 中更改 Windows 窗体上 Groupbox 的边框粗细?

    我没有找到任何解决方案可以帮助我解决有关 SO 的旧问题 是否可以通过更改颜色使它们更厚或更明显 如果是的话 一些代码会很棒 或者只是提示如何做到这一点 您需要进行定制GroupBox控制 看The Grouper 自定义 Groupbox
  • WPF 按钮相同/推荐宽度

    假设您有一个带有多个按钮的窗口 例如确定 取消或是 否 取消 所有按钮的宽度必须相同 显然 这可以通过猜测一个数字并将它们全部硬连接到该数字来完成 有没有更好的方法来做到这一点 一种会考虑首选 推荐尺寸的方法 确定 按钮应该有多宽 这不是一
  • 在Android模拟器中使用相机

    我希望使用网络摄像头在 Android 模拟器中模拟摄像头 基本上我只需要用模拟器中的相机拍照 不需要实时预览 即如果它使它更容易 我按照教程进行操作here这是我能找到的唯一一个接近我的要求的 但是该教程中使用的许多库 如 android
  • 如何计算猫鼬中具有一个不同字段的记录?

    在探索 Nodejs 的 mongoose 时 我遇到了需要知道我的集合中用户数量的问题 我的收藏有记录 每条记录都有一个用户 我想知道独特 不同 用户的数量 我怎样才能用猫鼬做到这一点 EDIT 数据库增长得非常快 是否有办法从数据库中获
  • Django ImageField 将可调用对象传递给 upload_to

    我正在尝试将自定义 upload to 函数传递给我的模型 imageField 但我想将该函数定义为模型函数 这可能吗 class MyModel models Model image models ImageField upload t
  • gganimate 绘图,其中点保留而线淡出

    这是一个可重现的静态图示例 我想要为其制作动画 我想展示 MCMC 采样器的行为方式 library tidyverse library gganimate set seed 1234 plot data lt tibble x cumsu
  • 更改 PDF 文件的文本和背景颜色

    我想以编程方式更改 PDF 文档中的背景颜色和文本颜色 以便它们在晚上更适合阅读 有点像在 Adob e Reader 中 编辑 gt 首选项 gt 辅助功能 gt 替换文档颜色 有没有好的 Windows 命令行工具或 API 可以做到这
  • 如何以编程方式绑定到静态属性?

    如何以编程方式绑定到静态属性 我可以用 C 来制作什么 Binding Source x Static local MyClass StaticProperty Update 是否可以进行 OneWayToSource 绑定 我知道 Two
  • d3 v4 geo绘制倒置边界

    当我在 SVG 元素中绘制百慕大三角形时 比例不是我所期望的 三角形应该延伸到框的边缘 并且填充是向后的 不是绘制三角形 而是绘制一个切掉三角形的正方形 var geojson features type Feature propertie
  • 在选定选项更改时显示和隐藏 html 元素

    在 JSP 页面中 我有一个下拉列表 当选择列表的第一个元素时 我希望在单击时显示一个文本区域 我是 Javascript Jquery 的新手 所以我显然在函数中遗漏了一些东西 文本区域从未显示 希望有人能帮忙 这是 HTML tr cl
  • 模型上的猫鼬 findOne 是否返回承诺?

    我有一个简单的 Node 模块 它导出一个进行数据库查询的函数 问题是该函数在数据库查询完成之前返回 use strict var mongoose require mongoose Model require entities user
  • 安装的python3.9在linux中不显示

    我按照此中的步骤安装了 python 3 9link sudo apt update sudo apt install python3 9 python3 9 sudo update alternatives install usr bin
  • 如何确定嵌入式系统中的最大堆栈使用率?

    当我给Keil编译器 callgraph 选项时 它为我静态计算准确的 最大堆栈使用量 唉 今天它给了我一条 最大堆栈使用量 284 字节 未知 没有堆栈大小的函数 消息 以及 没有堆栈信息的函数 列表 Nigel Jones 表示递归在嵌
  • 我是否需要在生产服务器上安装 Node.js 来托管 Angular 2?

    我正在尝试在我们的实时服务器 Windows 2008R2 IIS 7 5 服务器 上部署我的第一个 Angular 2 应用程序 MVC部分运行良好 我可以看到登录用户名并显示 MVC 布局的框架 但它总是将我重定向到 Error csh
  • 在“_strong id”类型的对象上找不到属性“标签”

    我正在根据本教程构建一个应用程序 http bit ly NI9kQe 它使用自定义 Web api 连接到 Web 服务器 要求之一是检测是否已点击 登录 或 注册 按钮 这是使用在界面生成器中为按钮设置的 标签 来完成的 注册按钮的标签
  • 绘图类绘制直线而不是曲线

    我有下面的代码 使用 UIBezierPath 绘制线条 代码使用addCurveToPoint它应该使用三次贝塞尔路径绘制曲线 但是代码的最终结果是绘制连接的直线 但是addLineToPoint没有被使用 可能发生了什么 为什么代码不绘
  • system() 的退出代码不符合预期

    system 函数返回的退出代码似乎是我从它调用的进程中获得的退出代码的 128 倍 从手册页 返回值 出错时返回的值为 1 例如 fork 2 失败 以及命令的返回状态 other 明智的 这是我所得到的 ls tinker c tink
  • 当项目具有复选框时,RecyclerView 项目不显示波纹/触摸反馈

    我希望 RecyclerView 中的项目在按下时有触摸反馈或波纹 但它们似乎不起作用 我认为这是因为复选框的原因 只有长按时才会出现波纹 简单按下则不会出现 有人可以帮我解决它吗 提前致谢 PD 我使用的是 ListView 项目布局父级
  • MSMQ - 无法从多播队列接收

    我试图了解多播在 MSMQ 中的工作原理 但我根本无法接收消息 即使是来自同一台计算机 我显然做错了什么 但看不出是什么 这就是我所在的地方 我手动创建了一个名为的非事务性专用队列MulticastTest然后将多播地址设置为234 1 1