首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中,当两个jms侦听器具有相同的侦听器容器工厂时,如何处理并发

在Spring中,当两个jms侦听器具有相同的侦听器容器工厂时,如何处理并发
EN

Stack Overflow用户
提问于 2020-09-11 13:08:56
回答 1查看 120关注 0票数 0

我应该监听两个队列,并以并发的方式处理消息。在某一时刻,我处理的消息不应该超过10条。为了测试这一点,我对我的DefaultJmsListenerContainerFactory 5-5进行了如下配置:

代码语言:javascript
复制
@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;
}

监听器如下:

代码语言:javascript
复制
@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个请求:

代码语言:javascript
复制
    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));
    }

下面是日志打印的内容:

代码语言:javascript
复制
 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

我不知道消费者是否被共享。有没有更好的测试策略?

EN

回答 1

Stack Overflow用户

发布于 2020-09-11 21:39:16

您将获得具有该配置的两个完整的侦听器容器;每个容器具有5个使用者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63841088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档