持久订阅者如何使用JMS?

时间:2017-09-28 03:40:06

标签: java spring-boot jms publish-subscribe durable-subscription

因此,我正在为一个主题创建并发使用者,即多个侦听器。我正在配置它们是耐用的。

@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个订阅者也确认,然后一次发送给所有订阅者?

  3. 我正在使用setsessiontransacted true。 现在1或2会发生什么? 此外,我假设代理为每个并发订户维护一个内部队列,以了解到该持久订阅者的消息流。

    有人可以解释一下流量如何用于配置并发消费者,持久订阅和setsessiontransacted = true?

1 个答案:

答案 0 :(得分:0)

消息提供程序将在发布时将事件消息放入订阅者的订阅队列中。订阅者从订阅队列中提取(或使用侦听器)这些消息。因此,如果订户忙于处理事件消息,其他订户根本不受影响,他们将继续接收发布。事实上,订户并不知道其他订户的存在。