0

所以我正在为一个主题创建并发消费者,即多个听众。我将它们配置为耐用。

@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;
} 

我在想持久消费者的用例场景是

我有一个发布消息的过程,并且消息被听众拾取。我在想如果有人停止了这个过程,我又重新启动它,我不会丢失消息和它们的处理,因为 f 持久消费者。

那正确吗?

我不会丢失消息,因为消息在 KahaDB 中,并且在进程重新启动后,它会将尚未完全处理的消息重新发送给侦听器,因为它们是持久的。这是正确的解释吗?

4

1 回答 1

1

那是对的; 主题订阅默认不持久;只有积极消费的订阅者才能收到消息。新消费者仅在订阅时发布新消息。

持久消费者的行为更像是一个队列;代理会跟踪它们并保留消息,直到所有此类消费者都收到它们为止。

订阅只有在建立时才会变得持久。如果代理不知道,则不会保留消息。因此,在发布任何消息之前建立您的持久订阅非常重要。

于 2017-09-29T14:45:26.787 回答