首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有相同容器工厂的@jmslistener是否共享线程池

具有相同容器工厂的@jmslistener是否共享线程池
EN

Stack Overflow用户
提问于 2018-09-12 15:56:52
回答 1查看 547关注 0票数 2

我在spring boot中有两个这样的jmsliteners设置:

代码语言:javascript
复制
@EnableJms

@JmsListener(id= "A1", destination = "dest1", containerFactory = "factory1")
@JmsListener(id= "A2", destination = "dest2", containerFactory = "factory1") 
public void onMessage(String request) {
    //some processing
}

@Bean(name = "factory1")
public JmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory cachingConnectionFactory){
 DefaultJmsListenerContainerFactory jmsListenerContainerFactory = new DefaultJmsListenerContainerFactory();
    jmsListenerContainerFactory.setConnectionFactory(cachingConnectionFactory);
    jmsListenerContainerFactory.setConcurrency("2-10");
    jmsListenerContainerFactory.setSessionTransacted(true);
    jmsListenerContainerFactory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    return jmsListenerContainerFactory;
}

由于两个jmslisteners具有不同的id但共享相同的containerFactory,这两个jmslisteners是否共享相同的线程池?

也就是说,如果我在dest1有100条消息,在dest2有1条消息,有没有可能所有可用的线程都将被侦听器a1占用,并且侦听器a2将无法运行,直到a1的大部分消息被消耗掉?

理想情况下,这两个应该并行运行,我不想在我的处理过程中创建一些异步的未来任务。

EN

回答 1

Stack Overflow用户

发布于 2018-09-12 20:47:33

它们是独立的;默认情况下,它们各自使用单独的SimpleAsyncTaskExecutor

您可以使用TaskExecutor配置工厂,并且容器将使用相同的all,但是,如果它是一个池化的执行器,那么它必须有足够的线程来支持所有侦听器的最大并发总量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52290206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档