如何通过 @JmsListener 仅更改一种方法的默认并发? 我已将并发添加到 @JmsListener(如下所示),但“JBoss 管理控制台运行时 JMS 队列指标”中没有任何变化。 我有 JBoss 6.4,Spring JMS 版本 4.3.1.RELEASE。
我的听众:
@JmsListener(containerFactory = "myJmsQueueListenerContainerFactory", destination = "some.destination", concurrency = "3-10")
@SendTo("some.place")
public TransactionBookingStatus bookTransaction(Message message) throws JMSException {
//my implementation
}
我的默认配置:
@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;
}
最佳答案
你所拥有的应该工作 - 打开 org.springframework.jms
的 DEBUG 日志记录,你会看到关于消费者管理的消息 - 确保在日志配置中包含线程,你应该会看到3 个消费者线程。
编辑
@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 个线程):
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.2.RELEASE)
bar received on DefaultMessageListenerContainer-3
bar received on DefaultMessageListenerContainer-2
bar received on DefaultMessageListenerContainer-1
关于java - Spring JMS @JmsListener 一种方法的另一种并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908517/