因此,我正在为一个主题创建并发使用者,即多个侦听器。我正在配置它们是耐用的。
@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?
答案 0 :(得分:0)
消息提供程序将在发布时将事件消息放入订阅者的订阅队列中。订阅者从订阅队列中提取(或使用侦听器)这些消息。因此,如果订户忙于处理事件消息,其他订户根本不受影响,他们将继续接收发布。事实上,订户并不知道其他订户的存在。