所以我正在为一个主题创建并发消费者,即多个听众。我将它们配置为耐用。
@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 的配置吗?