Сценарий использования устойчивых слушателей/потребителей

Итак, я создаю одновременных потребителей для темы, то есть нескольких слушателей. Я настраиваю их, чтобы они были прочными.

@Bean
public DefaultMessageListenerContainer listenerContainers() {
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    container.setConnectionFactory(connectionFactory());
    container.setDestinationName(COMMENT_QUEUE);
    container.setPubSubDomain(true);
    container.setSessionTransacted(true);
    container.setConcurrentConsumers(2);
    container.setSubscriptionDurable(true);
    container.setMessageListener(datafileSubscriber);
    container.start();
    return container;
} 

Я думаю, что сценарий использования длительного потребителя

У меня есть процесс, который публикует сообщение, и сообщение принимается слушателями. Я подумал, что если кто-то остановит процесс, и я снова его перезапущу, я не потеряю сообщения и их обработку из-за постоянных потребителей.

Это правильно?

Я не потеряю сообщения, потому что сообщения находятся в KahaDB, и после перезапуска процесса он будет повторно отправлять сообщения, которые не были полностью обработаны, слушателям, потому что они долговечны. Это правильное объяснение?


person africandrogba    schedule 29.09.2017    source источник


Ответы (1)


Это правильно; подписки на темы по умолчанию не долговечны; только подписчики, активно потребляющие сообщения get. Новые потребители получают новые сообщения только после подписки.

Постоянный потребитель больше похож на очередь; брокер отслеживает их и хранит сообщения до тех пор, пока все такие потребители не получат их.

Подписка становится долговечной только после ее установки. Если брокер об этом не знает, сообщения не сохраняются. Следовательно, важно установить постоянные подписки перед публикацией каких-либо сообщений.

person Gary Russell    schedule 29.09.2017
comment
Поэтому, когда процесс остановлен и после перезапуска все они снова становятся активными, и они получат предназначенные для них сообщения. - person africandrogba; 29.09.2017
comment
Правильный; даже сообщения, отправленные, когда они не работают (после того, как были установлены надежные подписки). - person Gary Russell; 29.09.2017
comment
Эй, Гэри, можешь взглянуть на это, stackoverflow.com/questions/46530555/ - person africandrogba; 02.10.2017
comment
Извините, на этой неделе я в отпуске. Напишите мне еще раз на следующей неделе, если вы не получите ответа от кого-то другого. - person Gary Russell; 03.10.2017