发布/订阅消息中的本地与远程队列

Pau*_*ell 8 architecture messaging activemq-classic msmq tibco-ems

如果我使用消息队列构建一个包含数十个发布者/订阅者的系统,我似乎有一些网络配置选项:

  1. 我可以拥有一台所有机器都使用的集群代理 - 每台机器都没有本地队列
  2. 我可以在每台机器上本地安装代理,并使用存储转发将消息传递到远程机器

不同的技术似乎强制执行不同的配置 - 例如,MSMQ要求每台机器都有自己的本地队列,而Tibco EMS似乎经常用于集群,而不是每个消费者都有本地队列.

没有本地队列的缺点是什么,以及影响决策的因素是什么?

Chr*_*son 5

没有提供持久消息存储的本地队列意味着您无法保证消息传递.在具有代理实例的集群中使用RabbitMQ之类的东西可以为您提供持久的机制来存储要传递的消息.如果必须通过网络连接连接到远程代理以发送持久消息,则网络故障的风险更高.

MSMQ也是存储转发,但它不提供任何集群路由功能.这意味着应用程序必须完成工作(或在其上面有一个层,例如MassTransit或NServiceBus为您完成).

当我想到TIBCO时,我想到了一个集中的EMS服务器集群,应用服务器与之通信而不是在本地运行代理实例.围绕EMS和BusinessWorks应用程序服务器的GUI工具确实在这个世界中强制建立模型.

在本地存储消息的任何分布式情况下,重要的是确保机器本身具有适当的消息存储装备,具有快速磁盘和足够的磁盘以用于预期的消息积压/容量.