2011-11-06 54 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