大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 使ActiveMQ消息持久化的方法

使ActiveMQ消息持久化的方法

更新時(shí)間:2022-05-07 09:40:20 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2572次

1.消息的持久化

JMS教程中講規(guī)范的時(shí)候說(shuō)過(guò):消息的可靠性通過(guò)三個(gè)方面保證——持久化、事務(wù)和簽收。這里說(shuō)一下ActiveMQ中消息持久化的方式。

ActiveMQ中常用的持久化機(jī)制有JDBC(將消息持久化到Mysql等數(shù)據(jù)庫(kù))、AMQ(低版本中的默認(rèn)方案)、KahaDB(5.4版本以后的默認(rèn)持久化方案)和LevelDB(在以后的版本中可能會(huì)變成默認(rèn)的持久化方案)。有了持久化機(jī)制,消息在發(fā)送后會(huì)首先持久化到對(duì)應(yīng)的文件或數(shù)據(jù)表中,在消息被消費(fèi)后,再?gòu)倪@些文件或表中刪除(對(duì)于持久化的主體消息不會(huì)刪除)。

有了消息的持久化,在消息服務(wù)器啟動(dòng)時(shí)會(huì)先從持久化的媒介中讀取之前未消費(fèi)的消息等信息,并將讀取到的消息發(fā)送給消息的訂閱者或者消費(fèi)者去消費(fèi),這樣就不會(huì)出現(xiàn)消息的丟失,保證了消息的可靠性。

2.消息持久化的方式

ActiveMQ中主要有以下幾種持久化的方式:

AMQ Message Stroe:基于文件的存儲(chǔ)方式,具有寫(xiě)入速度快和容易恢復(fù)的特點(diǎn),消息存儲(chǔ)在一個(gè)個(gè)文件中,文件的默認(rèn)大小是32M,是之前的默認(rèn)持久化方式,現(xiàn)在幾乎不用了

KahaDB:基于日志文件的持久化方式,從Active5.4版本后作為默認(rèn)的持久化方式,在activemq.xml文件中可以看到如下配置:

<persistenceAdapter>
	<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

即默認(rèn)情況下會(huì)將消息持久化到activemq安裝目錄下的/data/kahadb目錄下,在該目錄下有4個(gè)或5個(gè)文件,用來(lái)保存持久化的消息數(shù)據(jù)(db-n.log)和索引(db.data)等:數(shù)據(jù)會(huì)被追加到db-n.log文件中,當(dāng)不再需要某一個(gè)db-n.log文件中的數(shù)據(jù)的時(shí)候,該log文件會(huì)被丟棄。

這些文件的作用介紹:

db-<n>.log:KahaDB存儲(chǔ)消息到預(yù)定義大小的數(shù)據(jù)記錄文件中,文件命名為db-.log,當(dāng)數(shù)據(jù)文件已滿時(shí),會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)記錄文件,n的值也會(huì)隨之遞增,文件名按照數(shù)字進(jìn)行編號(hào),如db-1.log、db-2.log、db-3.log、…當(dāng)不再有引用道數(shù)據(jù)文件中的任何消息時(shí),文件會(huì)被刪除或歸檔。

db.data:該文件包含了持久化的BTree索引,索引了消息數(shù)據(jù)記錄中的消息,他是消息的索引文件,本質(zhì)上是B-Tree,使用B-Tree作為索引到db-n.log中找消息

db.free:當(dāng)前db.data文件中有哪些頁(yè)是空閑的,文件的具體內(nèi)容是所有空閑頁(yè)的ID

db.redo:用來(lái)進(jìn)行消息恢復(fù)

lock:文件鎖,表示當(dāng)前獲得KahaDB讀寫(xiě)權(quán)限的broker

JDBC消息存儲(chǔ):基于JDBC的消息存儲(chǔ),可借助于這種方式將消息持久化到Mysql等數(shù)據(jù)庫(kù)中

LevelDB消息存儲(chǔ):這種文件系統(tǒng)是從ActiveMQ5.8之后引進(jìn)的,和KahaDB非常相似,也是基于文件的本地?cái)?shù)據(jù)庫(kù)存儲(chǔ)形式,但是它提供了比KahaDB更快的持久性,它不是使用B-Tree索引日志,而是使用基于LevelDB的索引

JDBC + ActiveMQ高速緩存:即JDBC Message store with ActiveMQ Journal,和JDBC的方式很相似,只不過(guò)是在持久化到的數(shù)據(jù)庫(kù)和ActiveMQ服務(wù)器之間加了一層高速緩存

3.JDBC方式的消息持久化步驟

由于ActiveMQ是基于Java語(yǔ)言開(kāi)發(fā)的,因此我們可以直接在其項(xiàng)目的lib包下加入數(shù)據(jù)庫(kù)驅(qū)動(dòng)的jar包或者數(shù)據(jù)庫(kù)連接池的jar包等。

(1)將Mysql的驅(qū)動(dòng)jar包加入到ActiveMQ的lib目錄下

(2)在activemq.xml文件中配置數(shù)據(jù)源:activemq.xml類似于Spring的容器配置文件

<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> 
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
	<property name="url" value="jdbc:mysql://192.168.2.143:3306/activemq?relaxAutoCommit=true"/>
	<property name="username" value="root"/>
	<property name="password" value="123456"/>
	<property name="poolPreparedStatements" value="true"/>
</bean>

(3)修改消息的持久化方式:由默認(rèn)的KahaDB改為現(xiàn)在的JDBC的方式

改之前:

<persistenceAdapter>
    <kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

改之后:注意數(shù)據(jù)源的名稱要一致,createTablesOnStartup是說(shuō)重啟MQ服務(wù)后是否自動(dòng)創(chuàng)建ActiveMQ相關(guān)的表,一般設(shè)置為true

<persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true"/>
</persistenceAdapter>

(4)在連接的數(shù)據(jù)庫(kù)服務(wù)器上創(chuàng)建使用的庫(kù)

(5)配置好后,重啟MQ服務(wù),會(huì)看到數(shù)據(jù)庫(kù)中多了3張表,這些表是ActiveMQ啟動(dòng)服務(wù)時(shí)創(chuàng)建的根ActiveMQ相關(guān)的表

activemq_acks:該表記錄的是主題訂閱關(guān)系(消息簽收者)信息

activemq_msgs:該表記錄的是待消費(fèi)的消息,該表中的消息一旦被消費(fèi)則會(huì)被刪除(主題類的消息不會(huì)被清除)

activemq_lock:在集群環(huán)境中才有用,用于記錄哪個(gè)Broker是當(dāng)前的Master Broker

這樣配置好后,一旦有消息產(chǎn)生就會(huì)在相應(yīng)的表中看到記錄:但隊(duì)列中的消息一旦被消費(fèi)就又會(huì)被刪除

配置JDBC持久化的高速緩存:僅有上面的配置,則消息生產(chǎn)者每次有消息需要持久化都會(huì)通過(guò)JDBC去調(diào)用數(shù)據(jù)庫(kù)服務(wù)以持久化數(shù)據(jù),但像隊(duì)列中的消息,大部分在消費(fèi)后又需要清除,進(jìn)行及其短暫的持久化意義不大,但卻依然使JDBC頻繁的和數(shù)據(jù)庫(kù)進(jìn)行交互,效率低下。因此可以在ActiveMQ和數(shù)據(jù)庫(kù)服務(wù)器之間加一層高速緩存,用來(lái)暫時(shí)緩存消息,若隊(duì)列中的消息長(zhǎng)時(shí)間沒(méi)有被消費(fèi)時(shí)才進(jìn)行持久化,這樣就會(huì)大大減少ActiveMQ和數(shù)據(jù)庫(kù)服務(wù)交互的次數(shù),提高效率。舉例來(lái)說(shuō):生產(chǎn)者生產(chǎn)了1000條消息,這1000條消息會(huì)保存到緩存文件journal文件中,如果消費(fèi)者的消費(fèi)速度很快,在journal文件還沒(méi)有同步到數(shù)據(jù)庫(kù)之前,消費(fèi)者已經(jīng)消費(fèi)了900條,那么這時(shí)就只需要將剩余的100條同步即可,如果消費(fèi)者消費(fèi)的很慢,journal文件可以批量的將消息同步到數(shù)據(jù)庫(kù),大大減少了ActiveMQ和數(shù)據(jù)庫(kù)服務(wù)器的交互次數(shù)。將持久化的方式改為如下方式:

<persistenceFactory>
	<journalPersistenceAdapterFactory 
		journalLogFiles="4"
		journalLogFileSize="32768"
		useJournal="true"
		useQuickJournal="true"
		dataSource="#mysql-ds"
		dataDirectory="activemq-data"
	/>
</persistenceFactory>

以上就是關(guān)于“使ActiveMQ消息持久化的方法”介紹,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的ActiveMQ教程,里面還有更豐富的知識(shí)等著大家去學(xué)習(xí),相信對(duì)大家一定會(huì)有所幫助的。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 成人欧美视频在线看免费 | 久久久久精彩视频 | 国产在线播放一区 | 欧洲精品视频在线观看 | 亚洲欧美色综合精品 | 久久精品国产99久久72 | 国产亚洲精品福利片 | 一区二区视频在线观看免费的 | 日韩一区二区三区不卡 | 狠狠色丁香六月色 | 日韩五月天 | 久在线观看 | 国产91福利在线精品剧情尤物 | 99爱网站 | 午夜探花 | 免费观看欧美精品成人毛片能看的 | 午夜视频18 | 国产精品久久久久久久网站 | 国产大尺度福利视频在线观看 | 色久综合大榴莲 | 色精品一区二区三区 | 91香蕉国产亚洲一区二区三区 | 老子理论不卡影院6080 | 免费看a毛片 | 国产一级精品视频 | 日本一区二区三区在线播放 | 日韩免费一级毛片 | 国产h片在线观看 | 91av最新地址| 免费看真人a一级毛片 | 久久草精品 | 国产亚洲精品美女久久久久 | 欧美一级毛片片免费孕妇 | 99热久久这里只有精品6国产网 | 五月天激情视频在线观看 | 97成人精品视频在线播放 | 99re热久久资源最新获取 | 亚洲欧洲精品在线 | 2023中文字幕在线观看 | 97视频精品全国在线观看 | 日本乱中文字幕系列在线观看 |