【问题标题】:Can SEDA help scale a JMS consumerSEDA 可以帮助扩展 JMS 使用者吗
【发布时间】:2019-01-10 18:03:10
【问题描述】:

如果我有一个 Camel JMS 消费者,使用

  • maxConcurrentConsumers=10
  • 从最大池大小 =10 的 MQ 读取 连接),以及
  • disableReplyTo=true

Q1. 增加 maxConcurrentConsumers 是否有助于扩展路由?从队列中读取消息后,是否放弃连接?

Q2. 在消费消息后立即放置 SEDA 生产者-消费者模式是否有助于扩展?或者,是否还不如简单地增加 JMS 消费者的 maxConcurrentConsumers?

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    通常最好让 JMS 使用者进行缩放,然后通过添加更多节点进行水平缩放。

    SEDA 是 JVM 中的内存队列,即使您可以通过从 JMS 队列快速消耗到 SEDA 队列来“扩展”,那么您只需将消息从代理中的“安全”存储移动到JVM 内存存储中更“不安全”的存储。

    JMS 代理是为扩展而构建的,它具有多种架构样式和拓扑,可根据您的需要设置代理系统。所以最好利用它。

    JMS 组件具有设置并发性的选项,您也可以对其进行调整。在 JMS 客户端/代理端也是如此。例如 ActiveMQ 具有预取大小和其他可以调整的大小。

    戴上我的商业帽子:如果您是 Fuse 订阅者,那么我们有扩展 Fuse/AMQ 的指南,您也可以阅读并获得我们团队的帮助。

    【讨论】:

    • 感谢您的回答。如果 JMS 路由不是请求-答复,也不是事务处理,每个单独的“并发消费者”是否尝试保持连接?基本上,我想知道我的 MQ 连接池是否(比如说)最多 10 个,我是否还能从 20 个并发消费者中受益。或者,这是否可以通过消费者的 CACHE 选项来控制?
    • 是的,消费者可以在网络连接之上进行扩展。网络连接可以被池化,因此池化配置也很重要,使用 TCP/IP 设置的网络以及套接字/io 级别的所有内容也很重要。扩展也取决于你对 Camel 中的消息做了什么,如果他们正在做繁重的 CPU 工作,或者他们主要做其他 IO 操作,并等待远程服务响应等。
    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2018-09-28
    • 2011-07-11
    相关资源
    最近更新 更多