【问题标题】:Suggestions on improving performance with Spring JMS使用 Spring JMS 提高性能的建议
【发布时间】:2014-06-19 12:42:20
【问题描述】:

我正在使用 Spring JMS 侦听器从 AMQP 队列中读取消息。 如果消息处理失败,则使用事务处理会话来处理失败。 失败时将消息重定向到另一个队列。

尝试使用并发选项但不能使用它,因为我的消息处理需要按顺序选择消息。

处理队列中大约 5000 条消息大约需要 30 分钟。从队列中读取消息并保存在数据库中。

配置:

<jms:listener-container container-type="default" connection-factory="connectionFactory"    acknowledge="transacted">  

<jms:listener destination="queueName" ref="processQueueMessage" method="onMessage" />

</jms:listener-container>

寻找另一种处理消息的替代方法或任何关于改进现有流程的建议。

【问题讨论】:

  • Spring JMS 侦听器容器在#ss 中是一个真正的痛苦。我建议使用 apache camel 和 sjmsamqp 组件。
  • 我猜你的意思是 ActiveMQ。您是否有具体事实表明 Spring JMS 正在减慢速度?谈到性能,您应该尝试以可以并行使用消息的方式设计您的系统。毕竟,所有这些都是异步的,因此您不必关心顺序。现在,您的 5k 条消息在一个线程中处理:这是首先要解决的问题。
  • 嗨,Stephane,你说得对,ActiveMQ。正如我之前提到的,我不能使用并发选项进行处理。这是现有的设计和改进过程的尝试方法。寻找替代方案而不是完全重新设计。 Spring JMS 一次处理一条消息。检查我是否可以检索所有消息并根据需要进行处理?
  • 那会发生什么变化?无论如何,您都将序列化处理,并且您可能最终会得到相同的处理时间。我仍然很困惑为什么您认为 Spring JMS 需要优化,直到您可以隔离最慢的组件。我们可以在高度并发的环境中应用一些调整选项,但这不是您的情况。同样,您的单线程处理很可能是这里的罪魁祸首。

标签: jms spring-jms


【解决方案1】:

更新: 单独对消息消费做了一些分析。因此,按照 Stephane 的建议,删除了处理的持久性部分。写了一个测试用例来测试消息消费。 结果:消耗 5000 条消息大约需要 30-35 秒。

后续步骤: 查看数据库持久性,看看我是否能找到瓶颈。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2014-02-19
    • 2014-03-18
    相关资源
    最近更新 更多