【问题标题】:How to do MSMQ routing over HTTP?如何通过 HTTP 进行 MSMQ 路由?
【发布时间】:2016-02-06 02:45:31
【问题描述】:

Ì 有一个设置,我有一个服务器链,我需要在这些服务器之间发送消息:

A -> B -> C

在 AI 上,有一个应用程序将消息放在 A 上的本地 MSMQ 队列 (MSMQ-A) 上。该队列需要将消息转发到 B 上的 MSMQ 队列 (MSMQ-B),而 B 上的 MSMQ 队列又应该转发消息到 C (MSMQ-C) 上的 MSMQ 队列。在 C 上有一个应用程序可以监听来自 MSMQ-C 的消息。

消息不需要是事务性的。

如何配置 MSMQ-A 和 MSMQ-B 以转发消息?

更新

根据建议的答案,我这样做了:

我在 Windows 消息队列功能下启用了 HTTP 支持。 我在 System32/msmq/mappings 文件夹下添加了一个映射文件,如下所示:

<redirections xmlns="msmq-queue-redirections.xml">
   <redirection> 
     <from>http://machineA/msmsq/private$/logger</from>
     <to>http://machineB/msmq/private$/logger</to>
   </redirection>
</redirections> 

消息仍然卡在 machineA 上。

我正在使用 powershell 将消息发送到 A 上的队列,如下所示:Get-MsmqQueue -name logger |发送-MsmqQueue -body "asdasd"

【问题讨论】:

  • 重定向成功了吗?

标签: http routing msmq forwarding


【解决方案1】:

您所描述的设计不是 MSMQ 提供的。

MSMQ 将消息从发送者传递到接收者,仅此而已。你不能有一个接收者自动成为下一个接收者的发送者的链。您需要在每台机器上编写一个应用程序来接收来自队列的消息并创建它的新副本以发送到下一个。

MSMQ 路由是一个不同的概念。将其与包裹运输进行比较,包裹通过全国不同的仓库运送,直到到达最终目的地。每个仓库除了传递包裹外,什么都不做。他们不会打开包裹,使用内容,然后重新打包发送到下一个仓库。

您可能需要重定向 MSMQ 消息。例如,如果 A 是基于 Internet 的 PC,B 是面向 Internet 的服务器,C 是内部 LAN 上的 PC(并且您要发送 A->B->C)。如果您有这种情况,那么您需要查看重定向。

Delivering Messages Sent over the Internet

HTTP Message Redirection

【讨论】:

  • 那么我将如何设置系统,以便在 B 和 C 关闭时消息不会丢失。在 A 上设置 MSMQ 服务器是否足够?另外我不太明白这些文章..我应该在哪里做路由。在 MSMQ 实例上?我将在哪台服务器上设置映射?
  • 所有与 MSMQ 消息相关的机器都是 MSMQ 服务器,它们使用存储转发来防止消息丢失。所以 A+B+C 都需要安装带有 HTTP 支持选项的 MSMQ。 “我应该在哪里做路由?”您正在重定向,而不是路由。这可能听起来很迂腐,但它们在 MSMQ 中是不同的概念。 A 通过 HTTP 将消息发送到 B 面向 Internet 端的队列。B 有一个重定向文件,将该队列映射到 C 上的实际目标队列。B 上的队列实际上并不需要存在。这只是隐藏 C 使用的内部队列名称的一种方式。
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 2011-08-30
  • 1970-01-01
  • 2012-07-30
  • 2013-03-25
  • 2015-09-12
  • 2020-06-11
  • 1970-01-01
相关资源
最近更新 更多