activemq 的訊息儲存持久化:
什麼是可持久化:
為了避免意外宕機丟失資訊,需要做到重啟後可以恢復訊息佇列。訊息系統一般都會採用持久化機制。activemq 的訊息持久化機制有 jdbc amq kahadb 和 leveldb ,無論使用哪種持久化方式,訊息的儲存邏輯是一致的。
就是傳送者訊息傳送後,訊息中心首先將訊息儲存在本地資料檔案,記憶體資料庫或遠端資料庫等 再試圖將訊息傳送給接收者,成功則將訊息從儲存中刪除,失敗則嘗試傳送。
訊息中心啟動以後首先要檢查指定的儲存位置,如果有未傳送的訊息,則需要把訊息傳送出去。
持久化儲存方式:
儲存方式
說明amq message store
基於檔案的儲存方式,是以前的預設訊息儲存,現在不用了(5.3之前的版本)
kahadb(訊息儲存,預設)
基於日誌檔案,從activemq 5.4 開始預設的持久化外掛程式
jdbc 訊息儲存
基於第三方資料庫的訊息儲存
leveldb 訊息儲存
未成熟jdbc message store with activemq journal
jdbc 訊息儲存的公升級版,解決了讀寫效能的問題
kahadb
預設的訊息持久化儲存方式。在activemq.xml中的配置如下:
"$/kahadb"
/>
<
/persistenceadapter>
kahadb 儲存原理:
db - .log : kahadb 儲存訊息到預定義大小的資料記錄檔案中,檔案命名為 db.log。當檔案已滿時,乙個新的檔案會隨之建立,number 數值也會隨之遞增,當不再有引用到資料檔案中的任何訊息時,檔案會被刪除歸檔。
db.data 該檔案包含了持久化的btree 索引,索引了訊息資料記錄的訊息,它是訊息的索引檔案,本質上是b-tree,使用b - tree 作為索引指向 db - .log 裡面儲存的訊息。
db.free 當前 db.data 檔案有哪些頁面是空閒的,檔案具體內容是所有空閒頁的id。
db.redo 用來進行訊息恢復,如果kahadb 訊息儲存在強制退出後啟動,用於恢復btree 索引。
lock 檔案鎖,表示當前獲得 kahadb 讀寫許可權的 borker 。
leveldb
未成熟jdbc 訊息儲存
使用第三方資料庫進行訊息的儲存。
具體步驟:
將資料庫驅動包,新增到 lib 資料夾下。
jdbc 配置:
"#jymmysql"
/>
<
/persistenceadapter>
datasource : 指定將要引用的持久化資料庫的bean 名稱,createtableonstartup 是否在啟動的時候建立資料表,預設值是true。這樣每次啟動都會去建立資料表了。一般是第一次啟動設定為true,之後設定為false。
配置bean
"jymmysql"
class
="org.apache.commons.dbcp2.basicdatasource" destroy-method=
"close"
>
"driverclassname" value=
"com.mysql.jdbc.driver"
/>
"url" value=
"jdbc:mysql:"
/>
"username" value=
"root"
/>
"password" value=
"admin"
/>
"poolpreparedstatements" value=
"true"
/>
<
/bean>
資料庫中新建 activemq 資料庫
啟動 activemq 就會自動在activemq 庫中建立三張表.
jdbc儲存在點對點(queue) 型別中:
當 deliverymode 設定為 deliverymode.persistent 時,會儲存在資料庫(activemq_msgs)中。
當 deliverymode 設定為 deliverymode.non_persistent 時,會儲存在記憶體中。
並且訊息一旦被消費,就會從 borker 中刪除
topic 型別中:
先啟動消費者訂閱 然後再生產的情況下 將訊息儲存到 activemq_acks。
jdbc with journal(高效能)
修改配置檔案:
<
!--訊息儲存持久化jdbc message store with activemq journal--
>
journallogfiles=
"4"
journallogfilesize=
"32768"
usejournal=
"true"
usequickjournal=
"true"
datasource=
"#jymmysql"
datadirectory=
"activemq-data"
/>
<
/persistencefactory>
這種方式克服了 jdbc store 的不足,jdbc 每次訊息過來,都需要去寫庫和讀庫。
activemq journal 使用快取記憶體技術寫入技術,大大提高了效能。
當消費者的消費速度能夠及時跟上生產者訊息的生產速度時,journal 檔案就能大大減少 db 中的訊息。
學習年限不足,知識過淺,說的不對請見諒。
ActiveMQ 訊息儲存
理解 activemq 儲存訊息的儲存機制的基本知識是非常重要的。佇列和主題中的訊息儲存是不同的,因為有些可以在主題上優化的地方並不適合佇列。佇列儲存訊息是非常直接的 即最基本的先進先出 fifo 主題儲存訊息是有點複雜的,它為每乙個消費者維持乙個指向訊息佇列的指標。自從 5.3 版本之後,acti...
ActiveMQ的訊息儲存方式
1.佇列儲存 採取先進先出模式,同一時間,訊息只會傳送給某乙個消費者,只有當該訊息被消費並告知已收到時,它才能在 的儲存中被刪除。對於永續性訂閱來說,每乙個消費者都會獲取訊息的拷貝。為了節約空間,的儲存介質中只儲存了乙份訊息,儲存介質的持久訂閱物件為其以後的被儲存的訊息維護了乙個指標,消費者消費時,...
activemq的高階特性 訊息儲存持久化
activemq的高階特性之訊息儲存持久化 有基於檔案的,資料庫的,記憶體的。預設的是基於檔案的,在安裝目錄 data kahadb。在conf activemq.xml檔案中。把儲存持久化換成mysql的資料庫。1 修改配置檔案 在標籤後面新增 relaxautocommit true useun...