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

标签 architecture msmq messaging activemq tibco-ems

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

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

  • 不同的技术似乎强制执行不同的配置——例如,MSMQ 要求每台机器都有自己的本地队列,而 Tibco EMS 似乎经常在集群中使用,每个消费者都没有本地队列。

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

    最佳答案

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

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

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

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

    关于architecture - 发布/订阅消息中的本地队列与远程队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340334/

    相关文章:

    c# - 解析 MSMQ 路径以获取目标计算机地址

    .net-4.0 - 如何并行处理 MSMQ 消息

    c# - MSMQ + C#,接收带有编码 byte[] 正文的消息在 Windows 7 和 Windows XP 上的行为不同

    rabbitmq - 寻找正确的 mule 组件以按 fifo 顺序解复用消息

    c# - 服务器通知客户端它已初始化的最佳方式

    design-patterns - 选择哪种设计模式

    javascript - 单页 webapp 所需的设计建议

    scala - 让两个本地实例与 Akka 参与者通信所需的最少代码是多少?

    asp.net-mvc - 我可以在服务层中将数据整形为 ViewModel 吗?

    arrays - HTTP 补丁 : Proper JSON Patch notation for adding to empty array