MassTransit RabbitMQ 节点分布



我正在研究在我们的应用程序中将MassTransitMQ与RabbitMQ一起使用作为ESB。我正在寻找的主要好处是向传入数据流添加持久的异步消息传递处理。

我们的应用概况分为两部分:

传入数据流

  • 单向消息传递
  • 异步处理
  • 每分钟 10k+ 条消息

网站活动

  • 双向
  • 理想情况下,使用 c# 异步等待语言功能,但需要双向数据
  • 每分钟 <100

Web 应用程序消息传递不是必需的,但最好遵循相同的机制通过 ESB 完全抽象出数据访问。

问题:

从我所读到的内容来看;ESB 节点不应该知道或关心总线上的任何其他节点,它应该只做自己的工作并将消息发送到总线上,在需要时等待回复。对我来说,这意味着每个 Web/应用程序服务器都有自己的本地集群队列。这个假设正确吗?

如果这是正确的;我将如何以编程方式将计算机添加到群集?有什么需要注意的吗?

如果不正确;我将如何管理队列集群?创建专用集群有其自身的问题,例如DNS条目,冗余/离线节点的负载平衡等

我对 ESB 可以与 MassTransit 的实现一起添加的功能感到失望,但是我对在持久配置中设置它的最佳实践的后勤工作有点模糊。

感谢您的任何反馈和建议

更新我们正在将EC2用于机器基础设施,特别是我们使用可用区来最大程度地减少任何数据中心中断。使用此配置,我们有 3 个区域,每个区域都有一个 Web 服务器、应用程序服务器和数据库服务器(Couchbase)。我们还利用 EC2 的负载均衡器在可用区之间共享负载。

@Travis:您在亚马逊EC2中使用MT/RMQ有什么经验/建议吗?

因此,在比你大得多的规模上,我们有一个 RabbitMQ 集群,它位于负载平衡 (F5) 后面。使用 MT 的所有进程都引用负载平衡地址。每个进程唯一需要的是它自己的队列来接收。

RabbitMQ (3.0+) 中的集群全部在 RabbitMQ 配置中处理。进程/代码对群集一无所知。

不确定你在这个问题中所说的"节点"是什么意思,所以很难确保我回答了正确的问题。但是,一旦您在 RabbitMQ 中将进程添加到同一个虚拟主机(默认或其他),MT 就会连接它需要的所有部分(交换、队列和绑定)。

我们对 Travis 运行不同的方法。每台具有使用/处理或发布消息的服务的计算机也是 RabbitMq 集群中的节点。然后,每台机器只需要通过本地主机寻址RabbitMq

每个服务都在多台计算机上为了实现这一点,我们使用竞争消费者(即多台机器将从同一个集群队列中读取(但通过本地主机))因此,您的架构必须允许并行处理消息。

如果一台机器出现故障,至少还有另一台机器具有死机服务。

如果许多计算机出现故障,则还有其他计算机存储了所有消息,您可以将服务部署到这些计算机。

最新更新