4

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

我们的应用程序配置文件有两个部分:

传入数据流

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

网站活动

  • 两种方式
  • 理想情况下使用 c# async await 语言功能,但需要双向数据
  • < 100 每分钟

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

问题:

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

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

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

我对 ESB 可以与 MassTransit 的实现一起添加的功能感到失望,但是我对在哪里/如何在持久配置中设置它的最佳实践的后勤工作感到有些困惑。

感谢您的任何反馈和建议

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

@Travis:您对在 Amazon 的 EC2 中使用 MT/RMQ 有任何经验/建议吗?

4

2 回答 2

3

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

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

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

于 2013-09-17T12:08:52.940 回答
1

我们对 Travis 采用了不同的方法。每台拥有消费/处理或发布消息的服务的机器也是 RabbitMq 集群中的节点。然后,每台机器只需通过 localhost 访问 RabbitMq

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

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

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

于 2013-09-26T12:27:55.600 回答