是否可以使用MSMQ队列来对请求进行负载平衡?如果我有客户端1-n向WCF服务发送请求,然后将每个请求排入队列,并且后台有1-n个服务器,每个服务器在可用时抓取下一个可用请求,我会假设这有效地进行负载平衡。但是,我怎么才能得到回复?我意识到我可以在我的WCF服务中订阅“完整”事件,但是当我只关心一个时,我必须解析所有事件。我怎么能用这种架构完成某种回调机制?
答案 0 :(得分:4)
如果您使用MSMQ发送事件,那么就没有“获得回复”的内置概念。
这是一个解决方案:客户端每个人都可以拥有自己的消息队列。当工人完成任务后,他们可以向客户发送“已完成”的消息。
但是服务器如何知道客户端消息队列的地址?
一种方法是将客户端的消息队列地址作为每个函数中的参数提供。
更好的方法是将此地址包含为自定义标头值。 自定义标头解决方案是一种更好的方法,原因有两个。首先,可以通过客户端的配置文件进行配置,允许在部署后更改队列详细信息。其次,通信“管道”的细节进入函数调用抽象层是不可取的,并且自定义头解决方案允许您避免这种情况。
有关正在使用的自定义标头的示例,请参阅this question。
答案 1 :(得分:1)
您可以让工作人员将回复放在单独的回复队列中。然后,只需为每个请求 - 回复对使用一些唯一ID即可识别正确的回复。