gpt4 book ai didi

java - 通过同一个 ActiveMQConnectionFactory 使用多个 ActiveMQ 队列

转载 作者:行者123 更新时间:2023-11-30 03:45:48 25 4
gpt4 key购买 nike

我的应用程序处理放置在单个 ActiveMQ 队列(名为“incoming.queue”)上的传入消息。我有一个处理消息的 MessageListener,一切运行良好。我的 Java 配置如下:

@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将负责处理消息,但我不确定如何修改我的配置以创建三个消息监听器而不是一个。如有任何建议,我们将不胜感激。

最佳答案

我通过简单地创建多个 bean 解决了这个问题 - 没想到会这么简单:

@Bean
public DefaultMessageListenerContainer highPriorityQueue() {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(connectionFactory());
dmlc.setDestination(new ActiveMQQueue("high_priority.queue"));
dmlc.setMessageListener(new QueueProcessor());
dmlc.setConcurrentConsumers(50);
return dmlc;
}

@Bean
public DefaultMessageListenerContainer medPriorityQueue() {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(connectionFactory());
dmlc.setDestination(new ActiveMQQueue("med_priority.queue"));
dmlc.setMessageListener(new QueueProcessor());
dmlc.setConcurrentConsumers(20);
return dmlc;
}

@Bean
public DefaultMessageListenerContainer lowPriorityQueue() {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(connectionFactory());
dmlc.setDestination(new ActiveMQQueue("low_priority.queue"));
dmlc.setMessageListener(new QueueProcessor());
dmlc.setConcurrentConsumers(5);
return dmlc;
}

关于java - 通过同一个 ActiveMQConnectionFactory 使用多个 ActiveMQ 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25742914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com