可能有时候我们会遇到消息丢失的场景,比如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>