2015-11-05 63 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使用的內部隊列名稱的方法。 –