c# - 使用 msmq 队列对服务进行负载平衡?

标签 c# wcf architecture msmq soa

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

最佳答案

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

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

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

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

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

参见 this question有关使用自定义 header 的示例。

关于c# - 使用 msmq 队列对服务进行负载平衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030727/

相关文章:

c# - netTCPBinding 配置无法传输小型数据 - 套接字连接已中止

wcf - 创建动态代理对象

javascript - 在 brunch.io 中创建自定义 JS 目录

java - 使用继承(使用抽象类)在自定义框架内为子类提供一小部分方法的更优雅的方式?

c# - C# 中的数据库连接

c# - ASP.NET Core - 覆盖默认的 ControllerFactory

vb.net - WCF 和验证应用程序 block : Impossible to customize error messages?

node.js - 一个数据库,支持多区域应用

java - 用于 Java 服务器应用程序的 Tomcat 或 Jetty

c# - Visual Studio 2012 菜单 'analyze code coverage' 丢失