追溯消費者
背景
追溯消費者只是一個普通的 JMS 主題消費者,它表示在訂閱開始時,應盡一切努力回溯時間,並發送消費者可能錯過的任何舊訊息(或該主題上發送的最後一則訊息)。
請參閱訂閱恢復策略以了解更多詳細資訊。
範例
您可以如下方式將消費者標記為追溯消費者
topic = new ActiveMQTopic("TEST.Topic?consumer.retroactive=true");
consumer = session.createConsumer(topic);
限制
當跨經紀人網路使用時,追溯消費者將無法始終如一地運作。
在主題的情況下,當我們將經紀人 A 連接到經紀人 B 時,經紀人 B 會將其收到的所有訂閱發送給經紀人 A。由於經紀人 A 會將訊息複製到每個訂閱,並且我們希望避免在經紀人 B 接收重複訊息,因此我們不能向經紀人 A 發送同一個主題的多個訂閱。因此,我們的網路橋接器會追蹤跨網路發送的訂閱,並且只會將第一個主題訂閱發送出去。後續的訂閱會增加訂閱的參考計數,但實際上不會發送訂閱。
這本質上就是問題所在。如果對主題的第一個訂閱不是追溯的,則會從 B 發送到 A,而 B 經紀人將不會收到追溯訊息。然後後續的訂閱可能是(追溯的),但這不會導致追溯訊息從經紀人 A 發送到經紀人 B,因為後續訂閱不會發送到經紀人 A。