可能有時候我們會遇到消息丢失的場景,比如broker1和broker2通過networkConnector連接配接,一些消費者連接配接到broker1,消費broker2的消息。broker2的消息先被broker1消費掉,然後broker1轉發給這些消費者。但是轉發部分消息的時候,broker1挂掉了或者重新開機了。這些消費者發現broker1連接配接失敗,通過failover連接配接到broker2上去了。但是broker2之前轉發給broker1的還有部分消息沒有被消費,除非有其他的消費者連接配接到broker1上面去消費,這時候,怎麼辦呢?
destinationPolicy上有一個選項replayWhenConsumers,這個選項使得broker1上有需要轉發的消息但是沒有消費時,把消息回流到他原始的broker,同時把enableAudit設定為false,為了防止消息回流後被當做重複消息而不被分發。
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntrytopic=">" enableAudit="false">
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactoryreplayWhenNoConsumers="true" />
</networkBridgeFilterFactory>
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategylimit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>