天天看點

ActiveMQ消息回流

可能有時候我們會遇到消息丢失的場景,比如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>