我正在为jmsfactory配置并发性,以便使用我的队列。
我做到了:
@Bean(name = "myFactory")
public DefaultJmsListenerContainerFactory sqsFactory(SQSConnectionFactory connectionFactory,
CustomJmsListenerConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setConcurrency("1-3");
return factory;
}
我看到defaultjmslistenercontainerfactory.setconcurrency在后面调用defaultmessagelistenercontainer。
我的应用程序中配置了2个队列,我使用的是spring boot:
@JmsListener(destination = "queue1", containerFactory = "myFactory")
@JmsListener(destination = "queue2", containerFactory = "myFactory")
我正在阅读spring文档,遇到了一些方法,现在我有了一些疑问。
1-以下两者之间的区别是什么:
setConcurrency(String concurrency)
setConcurrentConsumers(int concurrentConsumers)
即使阅读文档,我也不理解这种差异以及这种配置是如何改变应用程序行为的。我认为setconcurrency应该是每个@jmslister用来从队列中获取消息的线程数。。。你能解释一个配置映像的例子吗,我有100条消息排队(每个配置的队列)?
2-设置maxmessagespertask(int maxmessagespertask)
如果我在队列中有100条消息,concurrency=3,这个数字是10(默认值),那么行为是什么?
1条答案
按热度按时间pkmbmrz71#
阅读这两种情况下的javadocs。
setConcurrency(String concurrency)
这只是一种方便setConcurrentConsumers(1);
setMaxConcurrentConsumers(3);
/**
*/
public void setMaxMessagesPerTask(int maxMessagesPerTask) {
Assert.isTrue(maxMessagesPerTask != 0, "'maxMessagesPerTask' must not be 0");
synchronized (this.lifecycleMonitor) {
this.maxMessagesPerTask = maxMessagesPerTask;
}
}