关于使用springjms提高性能的建议

关于使用springjms提高性能的建议,jms,spring-jms,Jms,Spring Jms,我正在使用SpringJMS侦听器从AMQP队列读取消息。 如果消息处理失败,则使用事务处理会话处理失败。 将消息重定向到其他队列失败时 尝试使用并发选项,但无法使用它,因为我的消息处理需要按顺序拾取消息 要处理队列中大约5000条消息,大约需要30分钟。。从队列读取消息并保存在数据库中 配置: <jms:listener-container container-type="default" connection-factory="connectionFactory" acknowl

我正在使用SpringJMS侦听器从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>

正在寻找处理消息的其他替代方法或任何改进现有流程的建议。

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

下一步:
查看DB持久性,看看是否能找到瓶颈。

Spring JMS侦听器容器是一个真正的难题。我建议将ApacheCamel与非常棒的
sjms
amqp
组件一起使用。我猜您指的是ActiveMQ。您是否有具体的事实表明SpringJMS正在减缓这一速度?谈到性能,您应该尝试以这样一种方式设计您的系统,即消息可以并行使用。毕竟,所有这些都是异步的,所以您不必关心顺序。现在,您的5k消息在一个线程中处理:这是要解决的第一件事。嗨,Stephane,您是对的。正如我前面提到的,我不能使用并发选项进行处理。这是一个现有的设计,正在尝试改进流程的方法。寻找替代方案,而不是完全重新设计。SpringJMS一次处理一条消息。检查是否可以检索所有消息并根据需要处理它们?这会有什么变化?无论如何,您都将序列化处理,并且最终可能会得到相同的处理时间。我仍然不明白为什么您认为SpringJMS需要进行优化,直到您可以隔离最慢的组件。我们可以在高度并发的环境中应用一些调优选项,但这里的情况并非如此。同样,单线程处理很可能是罪魁祸首。