apache active mq сообщение истекло, но метод с @JmsListener не вызывается - PullRequest
0 голосов
/ 22 марта 2019

Я столкнулся с одной проблемой, когда сообщение в 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 голосов
/ 26 марта 2019

Я внес одно изменение в использование spring-jms версии 4.3.22-RELEASE.

Теперь это работает как показано ниже: Изначально в заявке определены 3 нет потребителей и максимум 25. И теперь, если будет создано больше сообщений, скажем, 25, тогда потребителей останется только 3, и количество потребителей будет постепенно увеличиваться в зависимости от ожидающих сообщений. Это может пойти до 13, но не будет создавать максимальных потребителей до 25 согласно определению. Из-за этого порядок может измениться. Например: Сообщение1 Потребитель1 (выполняется) Сообщение2 Потребитель2 (выполняется) Сообщение3 Потребитель3 (в процессе)

Теперь, если эти сообщения обрабатываются и появляются новые сообщения, они будут ждать потребителей, как показано ниже Сообщение4 Потребитель1 (ожидание) Сообщение5 Потребитель2 (ожидание) Сообщение6 Потребитель3 (ожидание)

Теперь, когда эти сообщения 4-6 находятся в состоянии ожидания и продолжают поступать новые сообщения, что заставляет систему создавать новых потребителей, эти сообщения будут использоваться первыми. Сообщение7 Потребитель4 (в процессе) Сообщение8 Потребитель5 (выполняется)

Сначала используются сообщения 7-8, а затем сообщения 4-6. Но они будут потреблены, как только потребители освободятся.

...