因此,我正在为一个主题创建并发使用者,即多个侦听器。我正在配置它们是耐用的。
@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;
}
我认为持久消费者的用例场景是
我有一个发布消息的进程,并且侦听器会接收消息。我在想是否有人停止了这个过程,我又重新开始了,我不会因为持久的消费者而失去信息和处理。
是吗?
我不会丢失消息,因为消息在KahaDB中,并且在重新启动进程后,它将重新发送尚未完全处理给侦听器的消息,因为它们是持久的。 这是正确的解释吗?
答案 0 :(得分:1)
这是正确的;默认情况下,主题订阅不是持久的;只有订阅者主动消费获取消息。新消费者只会在订阅时发布新消息。
持久的消费者更像是一个队列;经纪人跟踪他们并保持信息,直到所有这些消费者都收到它们。
订阅仅在建立时变得持久。如果经纪人不知道,则不会保留消息。因此,在发布任何消息之前建立持久订阅非常重要。