我正在研究在我们的应用程序中使用MassTransit和RabbitMQ作为ESB。我正在寻找的主要好处是为传入的数据流添加持久的异步消息传递处理。
我们的申请资料分为两部分:
传入数据流
网站活动
Web应用程序消息传递不是必需的,但是通过ESB完全抽象化数据访问可以使用相同的机制。
问题:
从我读过的; ESB节点不应该知道或关心总线上的任何其他节点,它应该只是做它自己的工作并将消息发送到总线上,等待/当需要时回复。对我而言,这意味着每个Web / app服务器都拥有自己的本地群集队列。 这个假设是否正确?
如果这是正确的;我将如何以编程方式将计算机添加到群集?我需要注意哪些问题?
如果这不正确;我该如何管理队列集群?创建专用集群有自己的问题,例如DNS条目,冗余/脱机节点的负载平衡等等
我对ESB可以添加的功能以及MassTransit的实现感到失望,但是我对于在哪里/如何在持久配置中设置它的最佳实践的物流有点阴霾。
感谢您提供任何反馈意见建议
更新 我们正在将EC2用于机器基础设施,特别是我们使用可用区来最小化任何数据中心中断。通过此配置,我们有3个区域,每个区域都有一个Web服务器,应用服务器和数据库服务器(Couchbase)。我们还利用EC2的负载平衡器来共享区域之间的负载。
@Travis:您是否有任何在亚马逊EC2中使用MT / RMQ的经验/建议?
答案 0 :(得分:4)
因此,在比您大得多的规模上,我们有一个RabbitMQ集群,它位于负载平衡(F5)之后。使用MT的所有进程都引用了负载平衡地址。每个进程唯一需要的是它自己的队列接收。
RabbitMQ(3.0+)中的群集全部在RabbitMQ配置中处理。进程/代码对集群一无所知。
我不确定你在这个问题中对“节点”的意思,所以很难确定我正在回答正确的问题。但是只要在RabbitMQ中向同一个vhost(默认或其他)添加进程,MT就会连接它所需的所有部分(交换,队列和绑定)。
答案 1 :(得分:1)
我们对Travis采用不同的方法。 具有使用/处理或发布消息的服务的每台计算机也是RabbitMq集群中的节点。 然后每台机器只需通过localhost
解决RabbitMq问题每项服务都在多台计算机上 为实现这一点,我们使用竞争消费者(即多台机器将从同一个集群队列中读取(但通过localhost)) 因此,您的架构必须允许并行处理消息。
如果机器出现故障,至少还有另一台机器有死机服务。
如果许多机器出现故障,还有其他机器存储了所有消息,您可以将服务部署到它们。