Как работают постоянные подписчики с 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 немедленно подтверждают, потому что они простаивают.

Предположим, пришло второе событие, сейчас

  1. Отправляется ли это 4 подписчикам и сохраняет сообщение в очереди для 5-го подписчика и отправляет его 5-му подписчику только после подтверждения?

                        OR
    
  2. Он не отправляет ни одному из подписчиков сообщения, но ожидает в очереди, пока 5-й подписчик также не подтвердит, а затем отправит всем подписчикам одновременно?

Я использую setsessiontransacted true. Что происходит сейчас 1 или 2? Также я предполагаю, что брокер поддерживает внутреннюю очередь для каждого одновременного подписчика, чтобы понять поток сообщений этому надежному подписчику.

Может кто-нибудь объяснить, как работает поток для настройки одновременной работы потребителя, длительной подписки и setsessiontransacted=true?

1 ответ

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

Другие вопросы по тегам