#java #spring-jms
#java #spring-jms
Вопрос:
Предполагается, что я буду прослушивать две очереди и обрабатывать сообщения одновременно. За один момент я не должен обрабатывать более 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 потребителей были общими?
Я отправил 10 запросов в обе очереди, используя два цикла for:
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
Я не могу сказать, делятся ли потребители информацией. Есть ли лучшая стратегия тестирования?
Ответ №1:
Вы получите два полных контейнера прослушивателей с такой конфигурацией; каждый с 5 потребителями.