ActiveMQ 中的訊息遊標(Message cursors)
在Activemq以前的版本中,broker會把待傳送的訊息儲存在記憶體中。這種方式的缺陷是當消費者消費的速度趕不上生產者的速度時,會在broker的記憶體中積攢大量的訊息,當達到一個限額後,broker就不再接收訊息。這時生產者就被阻塞了,直到broker將記憶體清理能儲存訊息後才能繼續傳送。
在5.0版本後,Activemq實現了一種新的記憶體模型來防止慢消費者阻塞快速生產者。通常訊息在未發生或者傳送後未收到消費者的確認資訊時都會持久儲存訊息到儲存中。當有消費者來可以消費訊息時,broker會批量從儲存中取出訊息,傳送給消費者。遊標就是指向下次批量獲取訊息時的儲存位置。
根據遊標的儲存方式不同,可分為三種:
Store-based cursors
broker預設採用的遊標。它將遊標資訊儲存在儲存中。針對速度不同的消費者,這種遊標機制採取的方式不同。對於快速消費者,因為消費速度很快,儲存中的訊息數量會很少,所以不需要遊標。這時,訊息傳送到broker時,先儲存在持久儲存中,然後直接傳送給了消費者。而對於慢消費者,訊息的持久儲存中會儲存大量的訊息,所以需要使用遊標來指定下一次批量讀取訊息的位置。
VM cursors
若消費者能跟上生產者生產的速度,這時持久儲存中訊息雖然不是很多,但是若能也能在記憶體中儲存一些遊標,對獲取儲存中的訊息的效能會有很大的提升。
File-based cursors
對VM cursors 的一種改進。當記憶體中的遊標達到一定限額後,就會將一些遊標儲存到臨時檔案中。
Activemq預設使用store-based遊標。當然也可為不同的Destination修改遊標策略。通過修改destinationPolicy節點來更改預設配置。destinationPolicy節點包含多ge policyMap節點。policyMap包含一個policyEntries節點,policyEntries節點包含多個policyEntry 節點。policyEntry 就是具體的一個遊標策略了。Topics的消費者分為持久訂閱者和臨時訂閱者,所以有兩套配置。Queues只有一類消費者,所以只有一套配置。對於持久訂閱者可以使用PendingDurableSubscriberMessageStoragePolicy來指定遊標策略。可配置的策略有vmDurableCursor和fileDurableSubscriberCursor.
對於臨時訂閱者可以使用pendingSubscriberPolicy 來指定。可配置的策略有vmCursor和fileCursor。下面是關於Topics的一些xml配置:
Queues 同樣也有vm和file兩種型別的遊標儲存策略。pendingQueuePolicy 節點的可配置子節點有vmQueueCursor和fileQueueCursor
在5.0版本後,Activemq實現了一種新的記憶體模型來防止慢消費者阻塞快速生產者。通常訊息在未發生或者傳送後未收到消費者的確認資訊時都會持久儲存訊息到儲存中。當有消費者來可以消費訊息時,broker會批量從儲存中取出訊息,傳送給消費者。遊標就是指向下次批量獲取訊息時的儲存位置。
根據遊標的儲存方式不同,可分為三種:
Store-based cursors
broker預設採用的遊標。它將遊標資訊儲存在儲存中。針對速度不同的消費者,這種遊標機制採取的方式不同。對於快速消費者,因為消費速度很快,儲存中的訊息數量會很少,所以不需要遊標。這時,訊息傳送到broker時,先儲存在持久儲存中,然後直接傳送給了消費者。而對於慢消費者,訊息的持久儲存中會儲存大量的訊息,所以需要使用遊標來指定下一次批量讀取訊息的位置。
VM cursors
若消費者能跟上生產者生產的速度,這時持久儲存中訊息雖然不是很多,但是若能也能在記憶體中儲存一些遊標,對獲取儲存中的訊息的效能會有很大的提升。
File-based cursors
對VM cursors 的一種改進。當記憶體中的遊標達到一定限額後,就會將一些遊標儲存到臨時檔案中。
Activemq預設使用store-based遊標。當然也可為不同的Destination修改遊標策略。通過修改destinationPolicy節點來更改預設配置。destinationPolicy節點包含多ge policyMap節點。policyMap包含一個policyEntries節點,policyEntries節點包含多個policyEntry 節點。policyEntry 就是具體的一個遊標策略了。Topics的消費者分為持久訂閱者和臨時訂閱者,所以有兩套配置。Queues只有一類消費者,所以只有一套配置。對於持久訂閱者可以使用PendingDurableSubscriberMessageStoragePolicy來指定遊標策略。可配置的策略有vmDurableCursor和fileDurableSubscriberCursor.
對於臨時訂閱者可以使用pendingSubscriberPolicy 來指定。可配置的策略有vmCursor和fileCursor。下面是關於Topics的一些xml配置:
- <beans ... >
- <broker ...>
- ...
- <destinationPolicy>
- <policyMap>
- <policyEntries>
- <policyEntry topic="com.iona.>">
- ...
- <pendingSubscriberPolicy>
- <vmCursor />
- </pendingSubscriberPolicy>
- <PendingDurableSubscriberMessageStoragePolicy>
- <fileDurableSubscriberPolicy />
- </PendingDurableSubscriberMessageStoragePolicy>
- ...
- </policyEntry>
- ...
- </policyEntries>
- </policyMap>
- </destinationPolicy>
- ...
- </broker>
- ...
- </beans>
Queues 同樣也有vm和file兩種型別的遊標儲存策略。pendingQueuePolicy 節點的可配置子節點有vmQueueCursor和fileQueueCursor
- <beans ... >
- <broker ...>
- ...
- <destinationPolicy>
- <policyMap>
- <policyEntries>
- <policyEntry queue="com.iona.>">
- ...
- <pendingQueuePolicy>
- <vmQueueCursor />
- </pendingQueuePolicy>
- ...
- </policyEntry>
- ...
- </policyEntries>
- </policyMap>
- </destinationPolicy>
- ...
- </broker>
- ...
- </beans>
轉載: http://berdy.iteye.com/blog/814370
相關文章
- ActiveMQ 中的訊息持久化(二)MQ持久化
- ActiveMQ 中的訊息持久化(一)MQ持久化
- ActiveMQ持久化訊息MQ持久化
- ActiveMQ支援的訊息協議MQ協議
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- 訊息佇列之 ActiveMQ佇列MQ
- ActiveMQ - message cursorMQ
- Android訊息機制Message訊息池Android
- 訊息中介軟體之ActiveMQMQ
- ActiveMQ 訊息資料持久化MQ持久化
- ActiveMQ + Camel 實現訊息路由MQ路由
- 訊息佇列ActiveMQ的使用詳解佇列MQ
- MQTT 遺囑訊息(Will Message)的使用MQQT
- 溫故之訊息佇列ActiveMQ佇列MQ
- 常見訊息中介軟體之ActiveMQMQ
- unity 3種message訊息管理使用Unity
- weblogic jms訊息狀態messageWeb
- Docker學習之搭建ActiveMQ訊息服務DockerMQ
- 遊標引數shared_cached_cursors和軟軟解析
- 訊息佇列(Message Queue)基本概念佇列
- RocketMQ的事務訊息處理【half-message】MQ
- ActiveMQ訊息持久化機制配置注意事項MQ持久化
- 訊息佇列的作用以及kafka和activemq的對比佇列KafkaMQ
- Android 安全加密:訊息摘要Message DigestAndroid加密
- Android安全加密:訊息摘要Message DigestAndroid加密
- Android 訊息處理機制:Handler|MessageAndroid
- 誰才是最快的訊息佇列:ActiveMQ, RabbitMQ, HornetQ, QPID佇列MQ
- 訊息資料庫Message DB:PostgreSQL的事件儲存和訊息儲存 - Eventide Blog資料庫SQL事件IDE
- WebSphere Message Broker 中使用者出口跟蹤訊息Web
- 網易來聊聊子彈簡訊的訊息漫遊技術
- Activemq構建高併發、高可用的大規模訊息系統MQ
- 微信開發中的訊息驗證與訊息回覆
- RocketMQ原始碼解析之訊息消費者(consume Message)MQ原始碼
- 遠端呼叫服務(RPC)和基於訊息的通訊(Message Queue)對比RPC
- 訊息佇列之非同步訊息的基本概念以及ActiveMQ整合Spring的常用用法介紹 | 掘金技術徵文佇列非同步MQSpring
- 在WMB中整合 WTE 轉換行業標準訊息行業
- 訊息中介軟體部署及比較:rabbitMQ、activeMQ、zeroMQ、rocketMQ、Kafka、redisMQKafkaRedis
- WCF技術剖析之十八:訊息契約(Message Contract)和基於訊息契約的序列化