溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JMS與ActiveMQ消息數(shù)據(jù)持久化

發(fā)布時間:2020-06-09 03:32:56 來源:網(wǎng)絡(luò) 閱讀:367 作者:Blue后花園 欄目:系統(tǒng)運維
  • 認(rèn)識JMS
    JMS是Java消息服務(wù)(Java message service),是java平臺關(guān)于面向消息中間件(MOM)的API。用于兩個應(yīng)用程序或分布式系統(tǒng)應(yīng)用中,消息發(fā)送,消息異步處理。即應(yīng)用程序間通信通過JMS服務(wù),進行消息轉(zhuǎn)發(fā)。應(yīng)用程序間消息異步處理可解除應(yīng)用程序的耦合。
    JMS有消息異步處理、程序間解耦、消息可靠的優(yōu)勢。
  • JMS消息模型
    Queue點對點(Point to Point
    Queue隊列是點對點消費,發(fā)送者發(fā)送一條消息,只有唯一的一個消費者能對消息進行消費。消息生產(chǎn)者都將消息發(fā)送到消息的隊列(Queue)中。隊列的消息可以是持久的,保證消息服務(wù)出現(xiàn)故障仍然能夠傳遞消息。
    特點:
    1).每個消息只有一個消費者(Customer),消息一旦被消費,消息就不在隊列(Queue)了。
    2).消息發(fā)送者和接收者沒有時間依賴,消息發(fā)送者只管消息發(fā)送,不管消息的消費者是否有接收消息。
    3).消息被接收到消息后,會發(fā)送消息確認(rèn)(ACK)通知給消息隊列(Queue)。
    Queue模型圖:
    JMS與ActiveMQ消息數(shù)據(jù)持久化
    發(fā)布/訂閱(Publish/Subscribe)
    消息發(fā)布者發(fā)布消息,消息通過主題(Topic)傳遞給所有接收者,消息發(fā)布者和訂閱者彼此不相干。主題(Topic)主要用于保存和傳遞消息。
    發(fā)布/訂閱模型中,應(yīng)用程序有Topic、發(fā)布者(Publish)、訂閱者(Subscribe)組成。
    特點:
    1).每個消息可有多個消費訂閱者。
    2).發(fā)布者和訂閱者無時間依賴性。某個主題(Topic)的訂閱者,必須先創(chuàng)建一個訂閱者后才能消費發(fā)布者的消息,且為消費消息,訂閱者必須保持運行狀態(tài)。
    3).可持久化訂閱。
    Topic模型圖:
    JMS與ActiveMQ消息數(shù)據(jù)持久化

  • ActiveMQ消息數(shù)據(jù)持久化
    為了避免機器意外宕機,消息丟失。可進行對消息持久化操作,機器重啟后恢復(fù)消息隊列。ActiveMQ消息持久化機制有JDBC、AMQ、KahaDB和LevelDB。消息發(fā)送者將消息發(fā)送出去后,消息中心將消息數(shù)據(jù)存儲到本地文件、本地內(nèi)存或者數(shù)據(jù)庫等。消息持久化操作后,消息中心啟動后會先檢查指定存儲位置,如有未發(fā)送成功的消息,則繼續(xù)將消息發(fā)送出去。
    1).JDBC持久化方式
    此持久化方式會在數(shù)據(jù)庫創(chuàng)建3個表:activemq_msgs、activemq_acks、activemq_lock。activemq_msgs用于存儲消息,Queue和Topic都存儲于這個表中。
    配置方式:
    修改安裝目錄下的conf/activemq.xml文件。persistenceAdapter節(jié)點中配置。
    </persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="false" /> 
    </persistenceAdapter>

    2).AMQ方式
    性能高于JDBC,消息會按順序追加方式寫入日志文件中,性能較高。為了提升性能,會創(chuàng)建消息主鍵索引。缺點是索引文件很大,需占用大量磁盤空間。如果broker崩潰,重建索引速度非常慢。每個日志文件大小有限定(默認(rèn)32M)。超過此大小,會重新建立一文件。當(dāng)所有消息消費完成,系統(tǒng)刪除這個文件或進行規(guī)定(取決于配置)。
    配置:

    </persistenceAdapter>
    <amqPersistenceAdapter directory="${activemq.data}/activemq-data" maxFileLength="32mb"/>
    </persistenceAdapter>

    索引重建時間長,占用磁盤空間大,此方式不推薦。
    3).KafaDB方式
    KafaDB持久化是ActiveMQ默認(rèn)的持久化方式。KafaDB持久化和AMQ一樣都是基于日志文件,但KafaDB方式恢復(fù)時間遠(yuǎn)少于AMQ方式,且使用更少的數(shù)據(jù)文件。優(yōu)于AMQ方式持久化。
    配置:

    </persistenceAdapter>
    <kahaDB directory="${activemq.data}/activemq-data" journalMaxFileLength="16mb"/>
    </persistenceAdapter>

    directory:指定消息持久化的存儲目錄。
    journalMaxFileLength:指定保存消息日志文件大小。
    4).LevelDB方式
    ActiveMQ5.6版本后推出的LevelDB方式持久化。不過LevelDB方式性能要高于KafaDB,后面很可能是這個趨勢。
    配置:

    </persistenceAdapter>
    <replicatedLevelDB directory="${activemq.data}/activemq-data" replicas="3" bind="tcp://0.0.0.0:0" zkAddress="127.0.0.1:2181" zkSessionTimeout="2s" hostname="127.0.0.1" zkPath="/activemq/leveldb-stores"/>
    </persistenceAdapter>
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI