首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @JmsListener --另一个方法的并发性

Spring @JmsListener --另一个方法的并发性
EN

Stack Overflow用户
提问于 2016-12-01 10:43:15
回答 1查看 8K关注 0票数 3

如何通过@JmsListener只更改一个方法的默认并发性?我向@JmsListener添加了并发性(如下所示),但是在"JBoss管理控制台运行时JmsListener“中没有任何改变。我有JBoss 6.4,SpringJMSVersion4.3.1.RELEASE。

我的听众:

代码语言:javascript
复制
@JmsListener(containerFactory = "myJmsQueueListenerContainerFactory", destination = "some.destination", concurrency = "3-10")
@SendTo("some.place")
public TransactionBookingStatus bookTransaction(Message message) throws JMSException {
    //my implementation
}

我的默认配置:

代码语言:javascript
复制
@Bean
public JndiObjectFactoryBean jmsConnectionFactoryFactoryBean() {
    JndiObjectFactoryBean factory = new JndiObjectFactoryBean();
    factory.setJndiName("java:/ConnectionFactory");

    return factory;
}

public ConnectionFactory jmsConnectionFactory() {
    return (ConnectionFactory) jmsConnectionFactoryFactoryBean().getObject();
}

@Bean
public JmsTemplate testMessageTemplate() {
    JmsTemplate tmpl = new JmsTemplate();

    tmpl.setConnectionFactory(jmsConnectionFactory());

    return tmpl;
}

@Bean
public DefaultJmsListenerContainerFactory myJmsQueueListenerContainerFactory() {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(jmsConnectionFactory());
    factory.setConcurrency("3-40");

    factory.setErrorHandler(new TrnJmsErrorHandler());

    return factory;
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-01 14:16:47

您应该做的是打开org.springframework.jms的调试日志记录,然后您将看到关于使用者管理的消息,确保在日志配置中包括线程,并且您应该看到3个使用者线程。

编辑

代码语言:javascript
复制
@SpringBootApplication
public class So40908517Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(So40908517Application.class, args);
        JmsTemplate template = context.getBean(JmsTemplate.class);
        for (int i = 0; i < 3; i++) {
            template.convertAndSend("foo", "bar");
        }
        context.getBean(CountDownLatch.class).await();
        context.close();
    }

    @Bean
    public CountDownLatch latch() {
        return new CountDownLatch(3);
    }

    @JmsListener(destination = "foo", concurrency = "3-40")
    public void listen(String in) {
        System.out.println(in + " received on " + Thread.currentThread().getName());
        latch().countDown();
    }

}

结果(如预期的3个线程):

代码语言:javascript
复制
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.4.2.RELEASE)

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

https://stackoverflow.com/questions/40908517

复制
相关文章

相似问题

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