【问题标题】:Loadbalancing a service with an msmq queue?使用 msmq 队列对服务进行负载平衡?
【发布时间】:2011-11-06 21:59:24
【问题描述】:

是否可以使用 MSMQ 队列来负载平衡请求?如果我有 1-n 个客户端向 WCF 服务发送请求,然后该服务将每个请求排入队列,并且在后台有 1-n 个服务器,每个服务器都在它们可用时抓取下一个可用请求,我会假设这有效地实现了负载平衡。 .但是,我将如何获得回复?我意识到我可以在我的 WCF 服务中订阅“完成”事件,但是当我只关心一个事件时,我必须解析所有事件。我如何使用这种架构完成某种回调机制?

【问题讨论】:

  • 您必须使用原始 MSMQ 吗?您是否研究过 NServiceBus 或竞争 ESB 之一?

标签: c# wcf architecture msmq soa


【解决方案1】:

如果您使用 MSMQ 发送事件,则没有“获取响应”的内置概念。

这里有一个解决方案:每个客户端都可以有自己的消息队列来监听。当工作人员完成任务后,他们可以向客户端发送“已完成”消息。

但是服务器怎么知道客户端消息队列的地址呢?

一种方法是在每个函数中提供客户端的消息队列地址作为参数。

更好的方法是将此地址作为自定义标头值包含在内。 自定义标头解决方案是一种更好的方法,原因有两个。首先,这可以通过客户端的配置文件进行配置,允许在部署后更改队列详细信息。其次,永远不希望通信“管道”的细节侵入函数调用抽象层,而自定义标头解决方案可以让您避免这种情况。

有关使用自定义标头的示例,请参阅 this question

【讨论】:

【解决方案2】:

您可以让工作人员将回复放入单独的回复队列中。然后只需为每个请求-回复对使用一些唯一的 id 来识别正确的回复。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2017-03-25
  • 2013-03-24
  • 2018-07-17
  • 2016-08-23
  • 2018-10-14
  • 1970-01-01
相关资源
最近更新 更多