如何通过HTTP进行MSMQ路由?

时间:2015-11-05 10:03:46

标签: http routing msmq forwarding

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

A -> B -> C

在AI上有一个应用程序,它将消息放在A上的本地MSMQ队列(MSMQ-A)上。此队列需要将消息转发到B上的MSMQ队列(MSMQ-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> 

仍然消息卡在机器A上。

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

1 个答案:

答案 0 :(得分:0)

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

MSMQ从发送者向接收者发送消息,就是这样。您不能拥有一个链接器,接收器自动成为下一个接收器的发送者。您需要在从队列接收消息的每台计算机上编写一个应用程序,并创建一个新的副本以发送给下一个。

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

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

Delivering Messages Sent over the Internet

HTTP Message Redirection