如何在經紀人網路中使用持久訂閱者
常見問題 > 使用 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>