【发布时间】:2018-03-09 16:36:52
【问题描述】:
所以我正在为一个主题创建并发消费者,即多个听众。我将它们配置为耐用。
@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 的配置吗?
【问题讨论】:
标签: java spring-boot jms publish-subscribe durable-subscription