apache active mq消息出队,但未调用@JmsListener方法

时间:2019-03-22 09:04:11

标签: jms spring-jms

我遇到一个问题,即控制台中的Acpache ActiveMQ中的消息已出队,但没有调用具有@JmsListener的使用者方法,尽管使用者数量显示为7。

配置代码:

@Configuration
@EnableJms
public class JMSConfiguration {
    private static final String DEFAULT_BROKER_URL = "tcp://localhost:61616";
    private static final long DEFAULT_RECEIVE_TIMEOUT = 1000L;
    private static final String DEFAULT_CONCURRENCY = "25";

    @Bean
    public ConnectionFactory connectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setBrokerURL(DEFAULT_BROKER_URL);
        return connectionFactory;
    }

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory listenerFactory = new DefaultJmsListenerContainerFactory();
        listenerFactory.setConnectionFactory(connectionFactory());
        listenerFactory.setReceiveTimeout(DEFAULT_RECEIVE_TIMEOUT);
        listenerFactory.setConcurrency(DEFAULT_CONCURRENCY);
        return listenerFactory;
    }

    @Bean
    public JmsTemplate jmsTemplate() {
        JmsTemplate template = new JmsTemplate();
        template.setConnectionFactory(connectionFactory());
        return template;
    }
}

收听者代码:

@JmsListener(destination = Constants.EXPORT_QUEUE)
    public void onExportMessageReceive(Message message) {
        if (message instanceof Message) {
}
}

1 个答案:

答案 0 :(得分:0)

我对使用4.3.22-RELEASE版本的spring-jms进行了更改。

现在它的工作方式如下: 最初,在应用程序中定义了3个使用者数和最多25个。现在,如果产生更多的消息,比如说25,那么消费者将仅剩下3,并且基于待处理消息,消费者的数量将逐渐增加。根据定义,它最多可以增加到13个,但最多不能创建25个。 因此,订单可能会更改。例如: Message1 Consumer1(进行中) Message2 Consumer2(进行中) Message3 Consumer3(进行中)

现在,如果这些消息正在处理中并且出现了新消息,则它们将按照以下说明等待使用者 Message4 Consumer1(正在等待) Message5 Consumer2(正在等待) Message6 Consumer3(正在等待)

现在,由于这些消息4-6处于待处理状态,并且新消息不断出现,这迫使系统创建新的使用者,因此这些消息将首先被使用。 Message7 Consumer4(进行中) Message8 Consumer5(进行中)

首先使用Message7-8,然后使用Message4-6。但是一旦消费者获得免费,它们就会被消费。