如何在經紀人網路中使用持久訂閱者

 常見問題 > 使用 Apache ActiveMQ Classic > 如何在經紀人網路中使用持久訂閱者

持久訂閱者在 ActiveMQ Classic 經紀人叢集中表現會有些不同。兩個主要問題是,在持久訂閱者斷線並重新連線到網路中不同的經紀人,且沒有完全取消訂閱的情況下,訊息會卡在網路中的其他經紀人上。斷線/重新連線的原因可能是自願的(訂閱者使用故障轉移傳輸),也可能是非自願的(叢集中的某個經紀人發生故障)。

例如,如果您有兩個經紀人 A 和 B 雙向網路連接以形成叢集,而持久訂閱者連線到經紀人 B,則經紀人 A 上的生產者 P 會將訊息正確轉發到經紀人 B 和持久訂閱者。但是,如果訂閱者斷線並重新連線到經紀人 A,則在訂閱者離開期間由 P 發送的任何訊息都會卡在 B 上,直到訂閱者重新連線到 B。

解決方案是使用虛擬目的地

虛擬主題在底層使用佇列,這允許 ActiveMQ Classic 將每個訂閱者視為普通的佇列訂閱者。這允許 ActiveMQ Classic 使用此配置來重播叢集中另一個經紀人上孤立的訊息,如經紀人網路文件中所述。

<destinationPolicy>
  <policyMap>
    <policyEntries>
      <policyEntry queue="TEST.>" enableAudit="false">
        <conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
      </policyEntry>
    </policyEntries>
  </policyMap>
</destinationPolicy>

另請查看這個單元測試,以查看完整的配置和用法

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。版權所有 © 2024,Apache 軟體基金會。根據Apache 許可證 2.0授權。