【问题标题】:Use case scenario of durable listeners/consumers持久监听器/消费者的用例场景
【发布时间】:2017-09-29 22:47:36
【问题描述】:

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

@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 中,并且在进程重新启动后,它会将尚未完全处理的消息重新发送给侦听器,因为它们是持久的。 这个解释对吗?

【问题讨论】:

    标签: java spring-boot spring-jms durable-subscription


    【解决方案1】:

    这是正确的;主题订阅默认不持久;只有积极消费的订阅者才能收到消息。新消费者只有在订阅时才能获得发布的新消息。

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

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

    【讨论】:

    • 因此,当进程关闭并重新启动后,它们都将再次激活,它们将收到为它们准备的消息。
    • 正确;甚至在它们关闭时发送的消息(一旦建立了持久潜艇)。
    • 嘿加里,你能看看这个吗,stackoverflow.com/questions/46530555/…
    • 抱歉 - 我这周正在休假 - 如果您没有得到其他人的答复,请在下周再次联系我。
    猜你喜欢
    • 2018-11-08
    • 2010-12-14
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多