ActiveMQ之訂閱恢復策略

簡介

生產者在某個topic發送了多條消息後,這個時候非持久訂閱者才訂閱,那麼它是不能獲取之前生產者發送的信息的。或者,由於網絡問題,非持久類型的消費者處於非活躍狀態,無法接收到生產者發送的消息。使用消息恢復策略,可以解決上面的問題。ActiveMQ目前支持一個定時或固定大小的恢復緩衝區,在你連接到broker後,在一段時間內的消息會重新發送給訂閱者。

ActiveMQ提供的恢復策略

  • FixedSizedSubscriptionRecoveryPolicy
    保留固定字節的消息。

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<fixedSizedSubscriptionRecoveryPolicy maximumSize="1024"/>
	</subscriptionRecoveryPolicy>
</policyEntry>
  • FixedCountSubscriptionRecoveryPolicy
    保留固定數量的消息

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<fixedCountSubscriptionRecoveryPolicy maximumSize="100"/>
	</subscriptionRecoveryPolicy>
</policyEntry>
  • LastImageSubscriptionRecoveryPolicy
    保留最後一條記錄

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<lastImageSubscriptionRecoveryPolicy/>
	</subscriptionRecoveryPolicy>
</policyEntry>
  • NoSubscriptionRecoveryPolicy
    禁用回溯,這是默認配置。

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<noSubscriptionRecoveryPolicy/>
	</subscriptionRecoveryPolicy>
</policyEntry>
  • QueryBasedSubscriptionRecoveryPolicy
    根據查詢機制使用回溯

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<queryBasedSubscriptionRecoveryPolicy query="Color='red' AND Name='tom'"/>
	</subscriptionRecoveryPolicy>
</policyEntry>
  • TimedSubscriptionRecoveryPolicy
    保留指定時間內的消息

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<timedSubscriptionRecoveryPolicy recoverDuration="60000"/>
	</subscriptionRecoveryPolicy>
</policyEntry>
  • RetainedMessageSubscriptionRecoveryPolicy
    保留ActiveMQ.Retain屬性值爲true的最後1條消息

示例:

<policyEntry topic=">">
	<subscriptionRecoveryPolicy>
		<retainedMessageSubscriptionRecoveryPolicy/>
	</subscriptionRecoveryPolicy>
</policyEntry>

注意:需要設置retroactive屬性爲true。即:

Topic topic = session.createTopic("TEST.TOPIC?consumer.retroactive=true");
MessageConsumer consumer = session.createConsumer(topic);

參考:http://activemq.apache.org/subscription-recovery-policy.html
也可以參考:https://www.cnblogs.com/hapjin/p/5649696.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章