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