Мое приложение обрабатывает входящие сообщения, которые помещаются в одну очередь ActiveMQ (с именем «incoming.queue»). У меня есть MessageListener, который обрабатывает сообщения, и все работает хорошо. Мой Java конфигурации ниже:Потребляйте несколько очередей ActiveMQ через ту же ActiveMQConnectionFactory
@Configuration
@ComponentScan(basePackages="uk.co.domain")
public class JmsConfig {
@Bean
public ActiveMQConnectionFactory connectionFactory() {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
activeMQConnectionFactory.setBrokerURL("tcp://localhost:61616");
return activeMQConnectionFactory;
}
@Bean
public DefaultMessageListenerContainer jmsListenerContainer() {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(connectionFactory());
dmlc.setDestination(new ActiveMQQueue("incoming.queue"));
dmlc.setMessageListener(new QueueProcessor());
dmlc.setConcurrentConsumers(50);
return dmlc;
}
}
public class QueueProcessor implements MessageListener {
public void onMessage(Message message) {
// process the message
}
}
Другой отдел вносит изменения вверх по течению, так что сообщения будут распространяться среди трех различных очередей, названный «high_priority.queue», «med_priority.queue» и «low_priority.queue ». Количество одновременных потребителей для каждой очереди должно быть 50, 20 и 5 соответственно.
В моем коде тот же QueueProcessor
будет отвечать за обработку сообщений, но я не уверен, как изменить мой конфиг, чтобы создать три прослушивателя сообщений вместо одного. Любые советы приветствуются.
Правильная вещь, чтобы сделать, чтобы сохранить развязку было бы получить вверх по течению людей, использующих очереди для приоритетов в используйте встроенные приоритеты JMS, тогда вам не придется ничего менять. Нет причин для разделения очередей на основе приоритета. –
Я согласен с вашим комментарием, но, к сожалению, я не контролирую происходящие изменения. –