2017-09-29 37 views
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; 
} 

我想到的是耐用消費品的使用情況是

我有發佈消息,該消息被監聽器拾取的過程。我在想,如果有人阻止了這個過程,我又重新啓動了它,我不會因爲持久的消費者而失去信息和處理。

是嗎?

我不會因爲消息在KahaDB中而失去消息,並且在重新啓動過程之後,它會重新發送未完全處理的消息給聽衆,因爲它們是持久的。 這是正確的解釋?

回答

1

這是正確的;主題訂閱默認情況下不耐用;只有積極消費的用戶才能獲取消息。新消費者只會在訂閱時發佈新消息。

耐用消費者更像是一個隊列;經紀人會跟蹤他們並保留消息,直到所有這些消費者都收到。

訂閱只有在建立時才變爲持久。如果經紀人不知道,消息將不會被保留。因此,在發佈任何消息之前建立持久訂閱是非常重要的。

+0

因此,當進程停止並重新啓動後,它們都會再次激活,並且它們將獲得預定給它們的消息。 – africandrogba

+0

正確;甚至是在發送信息失敗時發送的消息(一旦建立了持久化子系統)。 –

+0

看到https://stackoverflow.com/help/someone-answers –

相關問題