使用线程池的 JMS 侦听器
Posted
技术标签:
【中文标题】使用线程池的 JMS 侦听器【英文标题】:JMS listener using thread pool 【发布时间】:2020-12-25 21:59:45 【问题描述】:我正在使用一个 Spring 项目,其中我有一个 JMS 事件侦听器的实现来处理来自队列的消息。
准确地说,我使用的是 SQS (AWS) 队列。
一切正常。
我的观点是: 我没有配置任何有关并发性的东西,但我希望有更多线程作为侦听器,以提高队列中消息处理的性能(速度)。
我正在考虑配置线程池(TaskExecutor)并在我的消息处理方法上添加注释@Async。
因此,我将在侦听器中添加一个 onMessage 方法,在消息验证之后,我将调用此异步方法。
这是一个好习惯吗?使用这种方法会有一些问题吗?
我正在网上寻找这个,我发现我可以直接在侦听器上配置并发值。
我很困惑,有很多可能的方法可以做到这一点,我无法理解最好的方法。
这些是等效的解决方案吗?
【问题讨论】:
【参考方案1】:不要使用@Async
- 只需增加监听容器的并发性,spring-jms 会自动为你处理。
【讨论】:
谢谢,你能举个例子吗?我的监听器上没有看到任何并发设置器。使用@Async 是个坏主意吗? docs.spring.io/spring-framework/docs/current/javadoc-api/org/… 使用@Async
在发生故障时会导致消息丢失。
如果我也在使用 AWS SQS 实施,是否可以使用它?我没有 DefaultMessageListenerContainer
我不确定你的意思;看起来它确实使用了它 - 请参阅 here 和 factory.setConcurrency("3-10");
。以上是关于使用线程池的 JMS 侦听器的主要内容,如果未能解决你的问题,请参考以下文章