2011-11-06 52 views
3

是否可以使用MSMQ隊列來負載均衡請求?如果我有客戶端1-n將請求發送給WCF服務,WCF服務會將每個請求排入隊列,並在後臺有1-n臺服務器,並在可用時請求下一個可用請求,但我會認爲這會有效地實現負載平衡。但是,我將如何獲得迴應?我意識到我可以在我的WCF服務中訂閱'complete'事件,但是當我只關心一個事件時,我必須解析所有事件。我怎麼才能完成這種架構的某種回調機制?使用msmq隊列負載均衡服務?

+1

您是否必須使用原始MSMQ?你看過NServiceBus還是其中一個競爭的ESB? – arootbeer

回答

4

如果您使用MSMQ發送事件,則不存在「獲取響應」的內置概念。

這裏有一個解決方案:客戶端可以有他們自己的消息隊列,他們聽。當工作人員完成任務後,他們可以發送一個「已完成」的消息給客戶。

但是服務器如何知道客戶端的消息隊列的地址?

一種方法是在每個函數中提供客戶端的消息隊列地址作爲參數。

更好的方法是將此地址作爲自定義標頭值。 由於兩個原因,自定義標頭解決方案是更好的方法。首先,這可以通過客戶端的配置文件進行配置,從而允許在部署後更改隊列詳細信息。其次,通信「管道」的細節侵入函數調用抽象層是不可取的,自定義頭文件解決方案可以避免這種情況。

查看this question瞭解正在使用的自定義標頭的示例。

+0

你能否回答http://stackoverflow.com/questions/9631349/what-is-outbound-transaction-in-layman-terms? – Lijo

1

您可以讓工作人員將答覆放在單獨的答覆隊列中。然後,爲每個請求 - 答覆對使用一些唯一的ID來標識正確的答覆。

+1

MSMQ爲每個消息生成一個關聯ID,可用於識別對特定消息的回覆... http://msdn.microsoft.com/en-us/library/system.messaging.message.id.aspx – Matt

+0

你可以請回答http://stackoverflow.com/questions/9631349/what-is-outbound-transaction-in-layman-terms? – Lijo