Как работают постоянные подписчики с JMS?
Таким образом, я создаю одновременных потребителей на тему, то есть несколько слушателей. Я настраиваю их на долговечность.
@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;
}
То, что я хочу знать,
Предположим, что событие пришло и оно опубликовано для всех 5 подписчиков. Один из них обрабатывает его, поэтому он не сразу подтверждает, пока процесс не завершен, а оставшиеся 4 немедленно подтверждают, потому что они простаивают.
Предположим, пришло второе событие, сейчас
Отправляется ли это 4 подписчикам и сохраняет сообщение в очереди для 5-го подписчика и отправляет его 5-му подписчику только после подтверждения?
OR
Он не отправляет ни одному из подписчиков сообщения, но ожидает в очереди, пока 5-й подписчик также не подтвердит, а затем отправит всем подписчикам одновременно?
Я использую setsessiontransacted true. Что происходит сейчас 1 или 2? Также я предполагаю, что брокер поддерживает внутреннюю очередь для каждого одновременного подписчика, чтобы понять поток сообщений этому надежному подписчику.
Может кто-нибудь объяснить, как работает поток для настройки одновременной работы потребителя, длительной подписки и setsessiontransacted=true?
1 ответ
Поставщик сообщений будет помещать сообщения о событиях в очередь подписки по мере их публикации. Это подписчики, которые извлекают (или получают с помощью слушателей) эти сообщения из своей очереди подписки. Поэтому, если подписчик занят обработкой сообщения о событии, другие подписчики не будут затронуты вообще, они будут продолжать получать публикации. Фактически подписчики не будут знать о присутствии других подписчиков.