问题描述
我应该在两个队列上侦听并以并发方式处理消息。我一瞬间不会处理超过10条消息。为了对此进行测试,我将DefaultJmsListenerContainerFactory 5-5如下配置:
@Bean
public ActiveMQConnectionFactory activeMQConnectionFactory() {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(broKER_URL);
return activeMQConnectionFactory;
}
@Bean
public DefaultJmsListenerContainerFactory jmsFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(activeMQConnectionFactory());
factory.setSessionAckNowledgeMode(ActiveMQSession.INDIVIDUAL_ACKNowLEDGE);
factory.setConcurrency("5-5");
return factory;
}
听众如下:
@JmsListener(id = "queue1",destination = "QUEUE1",containerFactory = "jmsFactory")
@JmsListener(id = "queue2",destination = "QUEUE2",containerFactory = "jmsFactory")
public void test(ActiveMQTextMessage message) throws InterruptedException,JMSException {
log.info("Received Task: " + message.getText());
long randomLong = (long)(Math.random() * 500);
Thread.sleep(randomLong);
log.info("Slept for " + randomLong + "ms for "+ message.getText());
message.ackNowledge();
}
每个侦听器都分配了5个消费者,还是在两个侦听器之间共享了5个消费者?如果前者是正确的,是否有任何配置可以共享5个使用者?
我使用两个for循环向两个队列发送了10个请求:
for(int i = 0; i < 10; i++) {
Queue1Sender.sendMessage("Queue1 Request: " + (i+1));
}
for(int i = 0; i < 10; i++) {
Queue2Sender.sendMessage("Queue2 Request: " + (i+1));
}
这是打印的日志:
Received Task: Queue1 Request: 2
Received Task: Queue1 Request: 3
Received Task: Queue1 Request: 1
Received Task: Queue1 Request: 4
Received Task: Queue1 Request: 5
Received Task: Queue2 Request: 1
Received Task: Queue2 Request: 2
Received Task: Queue2 Request: 3
Received Task: Queue2 Request: 4
Received Task: Queue2 Request: 5
Received Task: Queue2 Request: 6
Received Task: Queue1 Request: 6
Received Task: Queue2 Request: 7
Received Task: Queue2 Request: 8
Received Task: Queue1 Request: 7
Received Task: Queue1 Request: 8
Received Task: Queue1 Request: 9
Received Task: Queue1 Request: 10
Received Task: Queue2 Request: 9
Received Task: Queue2 Request: 10
我无法确定消费者是否正在共享。有更好的测试策略吗?
解决方法
您将获得两个具有该配置的完整侦听器容器;每个都有5个消费者。