分發策略
queue的分發策略
可插拔的分發策略只適用於topic。queue的分發策略比較固定:輪詢(默認)或按照嚴格順序。同時我們也應該瞭解prefect的意義。
ActiveMQ的prefetch缺省參數是針對處理大量消息時的高性能和高吞吐量而設置的,因此默認的prefect值很大,默認的分發策略會盡快嘗試將預取緩衝區填滿(prefetch buffers)。
然而在有些情況下,例如只有少量的消息而且單個消息的處理時間比較長,那麼在缺省的prefetch和dispatch policies下,這些少量的消息總是傾向於被分發到個別的consumer上。這樣就會因爲負載的不均衡分配而導致處理時間的增加。
對於隊列,你可以選擇使用輪詢或按嚴格順序(strictOrderDispatch)。
strictOrderDispatch表示在直到當前消費者的prefetch緩衝區滿了之後才選擇下一個消費者進行消息的分發。
通過下面的方式來啓用按嚴格順序分發的策略:
<policyEntry queue=">" strictOrderDispatch="false" />
如果你有幾個優先級不同的消費者,消息會先發送給優先級最高的消費者,直到它的prefect緩衝區滿,然後再下一個,等等。
從5.14.0版開始——strictOrderDispatch=true選項將確保只有一個消費者時重新發送消息的順序是嚴格的。
topic的分發策略
所有實現了org.apache.activemq.broker.region.policy.DispatchPolicy
的都可以。默認實現是org.apache.activemq.broker.region.policy.SimpleDispatchPolicy
,它將消息傳遞給所有的訂閱者。一個更高級的實現示例是org.apache.activemq.broker.region.policy.PriorityNetworkDispatchPolicy
,它只會分發給擁有最高優先級的網絡消費者。這在循環網絡拓撲結構中非常有用,因爲在這種拓撲結構中,到消費者的路由不止一條。
下面是一個Destination策略配置示例。
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="FOO.>">
<dispatchPolicy>
<roundRobinDispatchPolicy/>
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry topic="ORDERS.>">
<dispatchPolicy>
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<!-- 1 minutes worth -->
<subscriptionRecoveryPolicy>
<timedSubscriptionRecoveryPolicy recoverDuration="60000"/>
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry topic="PRICES.>">
<!-- lets force old messages to be discarded for slow consumers -->
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="10"/>
</pendingMessageLimitStrategy>
<!-- 10 seconds worth -->
<subscriptionRecoveryPolicy>
<timedSubscriptionRecoveryPolicy recoverDuration="10000"/>
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry tempTopic="true" advisoryForConsumed="true"/>
<policyEntry tempQueue="true" advisoryForConsumed="true"/>
</policyEntries>
</policyMap>
</destinationPolicy>
參考:http://activemq.apache.org/dispatch-policies.html
參考:https://blog.51cto.com/1754966750/1923299