2015-11-05 42 views
0

我有一个设置,其中我有服务器链,我需要之间发送消息:如何通过HTTP执行MSMQ路由?

A -> B -> C 

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

消息不需要是事务性的。

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

更新基于该建议的答案,我已经做到了这一点

我Windows下的消息队列功能启用HTTP支持。 我在System/MSMQ /映射下添加映射文件夹看起来像这样:

<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 | Send-MsmqQueue -body“asdasd”

+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

+0

那么我如何设置一个系统,这样如果B和C都关闭了,消息就不会丢失。在A上安装MSMQ服务器就足够了吗? 另外我不太了解文章..我应该在哪里做路由。在MSMQ的一个实例?在哪个服务器上设置映射? –

+0

所有涉及MSMQ消息的机器都是使用存储转发功能防止消息丢失的MSMQ服务器。所以A + B + C都需要安装MSMQ和HTTP支持选项。 “我应该在哪里做路由?” 您正在重定向,而不是路由。这可能听起来很迂腐,但它们在MSMQ中是不同的概念。 A通过HTTP将消息发送到B的面向Internet的一侧上的队列.B具有将该队列映射到C上的真实目标队列的重定向文件。B上的队列实际上并不需要存在。这只是一种隐藏C使用的内部队列名称的方法。 –