问题标签 [msmq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2372 浏览

wcf - WCF MSMQ 回调函数

我有一个使用 MSMQ 通过 WCF 将对象发送到另一个服务的系统。该服务可以很好地提取消息并对其进行处理。但我现在遇到的问题是我需要向调用系统发送响应。
例子:

  1. 创建客户对象
  2. 填充信息
  3. 通过 MSMQ 使用 WCF 将消息发送到服务
  4. 使用 Windows 服务从队列中提取消息
  5. 在 windows 服务上调用 Customer.Insert() 方法
  6. 我现在需要将新的客户 ID 发送回此处的调用应用程序。

有任何想法吗?

0 投票
2 回答
1076 浏览

msmq - 监控 MSMQ

我正在尝试使用 MSMQ 本地管理 API 和 mgmtinfo.exe 实用程序监视 Server 2003 群集中的远程私有 msmq。我可以使用以下命令列出集群资源上的队列:

但无法获取有关各个队列的信息。我很难制作正确的格式名称:

私有(集群)队列的格式名称是什么?我已经看到了对 guid 的引用,但我找不到与队列相关的一个……有人有建议吗?谢谢您的帮助!

0 投票
2 回答
3477 浏览

wcf - 如何编写使用 MSMQ 的事务性多线程 WCF 服务

我有一个 WCF 服务,可以将消息发布到一个私有的、非事务性的 MSMQ 队列。我有另一个 WCF 服务(多线程),它处理 MSMQ 消息并将它们插入数据库。

我的问题是测序。我希望消息按特定顺序排列。例如 MSG-A 需要在插入 MSG-B 之前进入数据库。因此,从数据库的角度来看,我目前的解决方案非常粗糙且昂贵。

我正在阅读该消息,如果它的 MSG-B 并且数据库中没有 MSG-A,我将其放回消息队列中,并继续这样做,直到将 MSG-A 插入数据库。但这是一项非常昂贵的操作,因为它涉及表扫描(SELECT stmt)。

消息总是按顺序发布到队列中。

没有使我的 WCF 队列处理服务单线程(通过将服务行为属性 InstanceContextMode 设置为 Single),有人可以提出更好的解决方案吗?

谢谢

0 投票
1 回答
504 浏览

.net - 从 windowsmobile 设备通过 MSMQ 发送消息时遇到问题

我正在尝试使用 MSMQ 从移动设备向服务器上的远程专用队列发送消息。

发生了什么?移动代码发送消息时,我没有遇到任何错误。如果我查看移动设备上的 msmq 文件夹,它确实为它发送到的远程创建了一个 .oq(出站队列)文件。

我在队列的格式名称中使用 Direct=TCP 和 IP 地址。我已经验证了相同的代码在我的桌面上运行没有问题。消息已正确传递。

我不认为代码是问题。也许我遗漏了一些必须在移动环境中完成的操作,以允许消息离开队列并传递到服务器。

我已经验证或解决问题的事情:

  1. 我已验证使用 verify 从 visadm 报告的所有内容都是可以接受的。
  2. 为 MSMQ 启用二进制。
  3. 日志报告 MSMQ 已启动且没有错误。
  4. 所有 SDK 证书都安装在设备上。
  5. 发送出站消息时会创建一个 .oq 文件。
  6. 邮件上启用了日志和死信。(服务器没有报告无法送达 - 我不相信它曾经连接过)
  7. 网络活跃且有效(我可以通过浏览器访问托管在服务器上的网页)
  8. 服务器 MSMQ 有效(我可以使用桌面上的相同代码并传递消息)
  9. 通过 visadm,MSMQ 的移动设备上的状态报告正确。

我希望有人可能熟悉 Windows Mobile 上的 MSMQ,他们可以就我可能没有检查或启用的内容给我一些建议。

我在设备上使用 .Net CF 3.5 并使用 C# 进行编码,但正如我所说,代码似乎不是问题。

提前感谢您的帮助

0 投票
2 回答
2956 浏览

c# - 如何阻止我的 System.Messaging.MessageQueue 将我的字符串包装在 XML 中?

我需要通过 Windows 消息队列从我的 C# 应用程序与旧应用程序通信。

旧版应用程序在特定的私有队列中需要纯字符串消息,但我似乎无法阻止 System.Messaging.MessageQueue 将我的消息包装在 XML 中!

我正在测试的代码非常简单:

问题是消息正在被 XML 序列化并在队列中显示为:

我无法修改旧应用程序的行为,因此我需要阻止 System.Messaging.MessageQueue 将我的消息格式化为 XML。

任何人都可以帮忙吗?

0 投票
1 回答
2229 浏览

c# - 两次接收相同的 MSMQ 消息?

我有一个基于 MSMQ 的系统,它具有相互通信的三层。为简单起见,我将它们称为第 1、2 和 3 层。它们的位置如下:

因此,第 1 层仅与第 2 层对话,第 3 层仅与第 2 层对话,第 2 层与其他两个对话。我有四个队列,

各层通过此基础设施进行通信:

(对不起,如果这比必要的更详尽)

无论如何,一条消息从第 1 层传递到第 2 层,进行一些处理,然后将另一条(相关)消息发送到第 3 层,反之亦然。我遇到的问题是,有时我会从第 1 层向第 2 层发送两条消息,但不是按顺序接收两条消息,而是两次接收第一条消息。我正在使用BeginReceiveonLayer1_out异步接收消息。完成后,我处理收到的消息并BeginReceive再次调用以获取下一条消息。

为了追踪这一点,我在发送端实现了一个消息计数器,并将其写入文本文件。我正在使用该Extension属性来存储此消息号的字符串表示形式,以便我可以在处理端检索消息号。当我收到一条消息时,我将这个号码写入另一个文件。这应该产生两个具有相同内容的文件,但我会看到类似的东西

在回执日志中,表明消息 215 被处理了两次,而 216 没有通过。就我的目的而言,两次处理同一条消息对我没有任何影响(因此这在一段时间内一直未被注意到),但完全丢失一条消息是一个大问题。

有什么想法吗?

0 投票
2 回答
473 浏览

wcf - MsmqIntegrationBinding 带有未知消息正文类型的序列化

我希望使用 MsmqIntegrationBinding 与具有序列化对象作为消息正文的遗留队列集成。有没有人想出一种方法来获取消息正文的“元数据”并创建一个服务端类以在服务中使用?

例如,如果我从系统 A 中放入一个序列化的 Product 对象并且我的服务需要使用它,如果我身边没有 Product 类,我如何为 MsmqMessage 提供类型?我正在考虑在一个单独的程序中读取一条消息,反序列化,然后通过代码 dom 发出。想法?

0 投票
5 回答
3032 浏览

dns - 无法使用 2 个 DNS 名称发送到 MSMQ

我们在向服务器上的第二个 DNS 名称发送 MSMQ 消息时遇到问题。如果我们为同一台服务器发送 IP,我们很好,但这不是我们在架构上要去的地方。关于为什么 MSMQ 会关心它收到的名称的任何想法?

服务器信息:

物理服务器load-int-01,具有与之关联的第二个 IP 和 DNS 名称。

  • 第一个 IP/DNS: load-int-01, 带 IP10.0.10.10
  • 第二个 IP/DNS: load-intv, 带 IP10.0.10.20

使用的队列路径格式:

  • FormatName:DIRECT=OS:load-int-01\private$\MyQueue→ 工作正常
  • FormatName:DIRECT=OS:load-intv\private$\MyQueue→ 返回错误...

    队列不存在或您没有足够的权限执行此操作

我们也尝试改用 IP 地址,两组 IP 都可以正常工作。

  • FormatName:DIRECT=TCP:10.0.10.10\private$\MyQueue→ 工作正常
  • FormatName:DIRECT=TCP:10.0.10.20\private$\MyQueue→ 工作正常
0 投票
2 回答
416 浏览

msmq - 消息平台

我们正在考虑在银行环境中集成两个核心系统的消息传递平台。我们正在研究开源选项。您使用过哪些产品,可以分享经验吗?

0 投票
2 回答
1724 浏览

.net - MSMQ:传递到远程队列时未返回确认

我有以下代码片段来测试 MSMQ 确认:

如果 queuePath 和 ackQueuePath 都是本地的,即“.\private$\queuename”格式,我会在主队列中收到“test”消息,并按预期在管理队列中收到到达队列确认。但是,如果 queuePath 指向远程队列,即“FormatName:DIRECT=OS:MACHINENAME\private$\queuename”格式,我会在该远程队列中收到“test”消息,但在本地管理队列中没有到达队列确认.

我没有看到任何表明无法从远程队列返回确认的信息,因此我认为我的代码或环境存在问题。有任何想法吗?

(两台机器都是 Windows 2003。)