1. 程式人生 > >ActiveMQ訊息儲存機制

ActiveMQ訊息儲存機制

ctiveMQ是當下最流行和強大的開源企業訊息整合元件。

ActiveMQ效能優良,支援多種跨語言的客戶端和協議,支援JMS1.1和J2EE1.4,易於使用並且特性多多。

ActiveMQ基於Apache 2.0 License軟體協議。

當前最新版本為5.2.0(目前最新的是5.13.X)

最新特性

  • 多語言多協議支援,Java、C、C++、C#可以通過OpenWire協議編寫高效的客戶端;
  • Stomp協議的支援使得我們可以用Ruby、Perl、Python、AS等等語言方便的編寫客戶端程式。
  • 通過整合Apache Camel 庫,中介軟體和客戶端可以完全支援Enterprise Integration Patterns(企業整合模式)
  • 支援許多高階特性如:訊息群組(Message Groups)、虛擬端點(Virtual Destinations)、萬用字元(Wildcards)、複合端點(Composite Destinations)等
  • 完全支援JMS1.1和J2EE1.4規範包括對臨時、持久、XA事務訊息的支援
  • spring支援JMS規範,所以Acticemq可以整合到spring,集中管理。
  • 在支援J2EE1.4規範的多個流行J2EE伺服器上通過測試。
  • 可插拔的傳輸協議支援 比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports
  • 支援超快的JDBC訊息持久化和高效的日誌系統
  • 為高效服務叢集、客戶服務機、基於點通訊系統而設計。
  • REST-ful支援。
  • Ajax支援。
  • 對CXF和Axis的支援可以幫助Activemq通過web service來提供可靠的訊息服務。
  • 等等。。。

ActiveMq5.2.0 對JDK的要求是 JDK 5 and later。如果要搭建MQ服務,那麼在目標機器上必須設定JAVA_HOME變 量,指向JDK的安裝目錄。

依賴:

要正常使用ActiveMq的功能至少需要activemq-core.jar、commons-logging.jar、J2EE API。

AMQ Message Store 是什麼?

預設的activemq訊息儲存是通過一個所謂的AMQ Message Store來完成。

AMQ Message Store是一個高效的可嵌入支援事務的訊息儲存解決方案。

在此方案下訊息(Message)本身以日誌的形式實現持久化,存放在Data Log裡。並且還對日誌裡的訊息做了引用索引,方便快速取回Message。

一般情況下訊息索引存放於記憶體(Cache)中,MQ Server定期將索引內容持久化,存放到Reference Store。

Message Data Log檔案是有容量限制的,預設是32MB,可自行配置容量。當該Data Log檔案裡所有訊息都被消費完的時候,Data Log檔案就會被加上一個標記,通知下一次訊息清理時可以被處理掉(處理方式可以是delete或是轉移到Achieve目錄)。

AMQ Message Store方案中 Cache 、Data Log、Reference Store 協作圖如下:

AMQ Message Store的屬性是可以配置的,你可以在conf/activemq.xml配置檔案裡新增上如下配置:

Xml程式碼

 <persistenceAdapter> 
<amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>
 </persistenceAdapter> 

屬性說明

property name

default value

Comments

directory

activemq-data

儲存訊息檔案和日誌的目錄

useNIO

true

使用 NIO 特性

syncOnWrite

false

同步寫檔案到磁碟

maxFileLength

32mb

Message Data日誌檔案的最大 Size

persistentIndex

true

持久化日誌索引,如果設為 false ,則在記憶體中儲存

maxCheckpointMessageAddSize

4kb

在自動提交前在事務中能保持的最大訊息數

cleanupInterval

30000

每隔多少時間清理不再使用的訊息日誌(毫秒)

indexBinSize

1024

這個值是用來提升索引的效能的,值越大,索引相對效能越好

indexKeySize

96

index key的size,index key基於message id

indexPageSize

16kb

索引頁的size

directoryArchive

archive

消費完的Data Log存放的目錄

archiveDataLogs

false

設定為true的話,消費完的Data Log就放到Archive目錄,而不是刪除。

AMQ Message Store體系中 目錄結構參照下圖 :

頂層目錄broker name

用broker name命名,預設目錄名是localhost,broker name在activemq的配置檔案裡指定,以下是它的子目錄:

archive

丟棄的Data Log就放到這裡,當archiveDataLogs 屬性配置為true時才會存在

journal

message data log的所在

kr-store

reference store 目錄

data

引用索引所在目錄

state

記錄store的狀態

tmp-storage

用來儲存一些事物性的訊息以減輕記憶體的負擔例如等待正常但是速度很慢的消費端來消費非持久化的Topic.

其他持久化方式

activemq同樣支援JDBC持久化Message,我們只需要把配置層

Xml程式碼

 <persistenceAdapter> 
<amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>
</persistenceAdapter>

改成AMQ Message Store and JDBC(推薦,同時使用兩者可以同時保證效率和可靠性):

Xml程式碼

 <persistenceAdapter>
<journaledJDBC dataDirectory="${activemq.base}/data" dataSource="#oracle-ds"/>
</persistenceAdapter>

或是 JDBC only(現階段不推薦,單獨的JDBC儲存效率不高):

Xml程式碼

 <persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#oracle-ds"/>
</persistenceAdapter>

Oracle資料來源的配置如下:

Xml程式碼

 <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
      <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/>
      <property name="username" value="scott"/>
      <property name="password" value="tiger"/>
      <property name="maxActive" value="200"/>
      <property name="poolPreparedStatements" value="true"/>
    </bean>

其他資料來源配置參照Activemq的文件。

相關推薦

ActiveMQ訊息儲存機制

ctiveMQ是當下最流行和強大的開源企業訊息整合元件。 ActiveMQ效能優良,支援多種跨語言的客戶端和協議,支援JMS1.1和J2EE1.4,易於使用並且特性多多。 ActiveMQ基於Apache 2.0 License軟體協議。 當前最新版本為5.2.0(目前最新的是5.13.X) 最新特性: 多

ActiveMQ訊息傳送機制以及ACK機制詳解 AcitveMQ是作為一種訊息儲存和分發元件,涉及到client與broker端資料互動的方方面面,它不僅要擔保訊息儲存安全性,還要提供額外的

    AcitveMQ是作為一種訊息儲存和分發元件,涉及到client與broker端資料互動的方方面面,它不僅要擔保訊息的儲存安全性,還要提供額外的手段來確保訊息的分發是可靠的。 一. ActiveMQ訊息傳送機制     Producer客戶端使用來發送訊息的, Consumer客戶端用來消費

ActiveMQ訊息傳送機制以及ACK機制詳解

AcitveMQ是作為一種訊息儲存和分發元件,涉及到client與broker端資料互動的方方面面,它不僅要擔保訊息的儲存安全性,還要提供額外的手段來確保訊息的分發是可靠的。   一. ActiveMQ訊息傳送機制     Producer客戶端使用來發送訊息的, Cons

談談Activemq儲存機制

mq的訊息儲存有三個地方,分別是:mq代理的記憶體空間、持久儲存區、臨時儲存區。對應引數為:   <systemUsage>     <systemUsage>         <memoryUsage>             <memoryUsage limit=

ActiveMQ訊息傳送機制以及ACK機制

    AcitveMQ是作為一種訊息儲存和分發元件,涉及到client與broker端資料互動的方方面面,它不僅要擔保訊息的儲存安全性,還要提供額外的手段來確保訊息的分發是可靠的。 一. ActiveMQ訊息傳送機制     Producer客戶端使用來發送訊息的, Consumer客戶端用來消費

activemq訊息儲存滿導致的伺服器崩潰

1.通過jstack 出來的執行緒有巨量的鎖死現象 "http://*:3050-8188" daemon prio=10 tid=0x00007fc597d60800 nid=0x9f03 waiting on condition [0x00007f

【RocketMQ原始碼學習】- 5. 訊息儲存機制

前言 面試官:你瞭解RocketMQ是如何儲存訊息的嗎?我:額,,,你等下,我看下這篇文字, (逃 由於這部分內容優點多,所以請哥哥姐姐們自備茶水,歡迎留言!   RocketMQ儲存設計是高可用和高效能的保證, 利用磁碟儲存來滿足海量堆積能力。Kafka單機在topic數量在100+的時候,效能會

資料來源管理 | Kafka叢集環境搭建,訊息儲存機制詳解

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent) # 一、Kafka叢集環境 ##

ActiveMQ學習筆記(8)----ActiveMQ訊息儲存持久化

1. 概述   ActiveMQ不僅支援persistent和non-persistent兩種方式,還支援訊息的恢復(recovery)方式。 2. PTP   Queue的儲存是很簡單的,其實就是FIFO的Queue      2. PUB/SUB   對於持久化訂閱主題,每一個消費者都將獲得一

activemq訊息機制和持久化介紹

前面一節簡單學習了activemq的使用,我們知道activemq的使用方式非常簡單有如下幾個步驟: 建立連線工廠 建立連線 建立會話 建立目的地 建立生產者或消費者 生產或消費訊息 關閉生產

ActiveMQ的幾種訊息持久化機制

為了避免意外宕機以後丟失資訊,需要做到重啟後可以恢復訊息佇列,訊息系統一般都會採用持久化機制。 ActiveMQ的訊息持久化機制有JDBC,AMQ,KahaDB和LevelDB四種方式,無論使用哪種持久化方式,訊息的儲存邏輯都是一致的。 就是在傳送者將訊息傳送出

ActiveMQ(二)——訊息處理機制

一、前言 上文中,小編提到安裝ActiveMQ,但是對於ActiveMQ中訊息是用什麼樣的形式儲存的?下面小編就向大家介紹一下。 二、訊息型別 對於訊息的傳遞有兩種型別: 1.點對點的,即一個生產者和一個消費者一一對應; 2.釋出/訂閱模式,即一個生產者產生訊

activemq 應答ack機制與消費訊息過程分析

主要關注有以下兩點: 如何獲取訊息? 訊息如何應答? ActiveMQMessageConsumer.receive 這個方法是同步阻塞獲取訊息的方法,嘗試從原始碼分析其工作原理。 @Override public Message re

ActiveMQ的JDBC訊息持久化機制

為了避免意外宕機以後丟失資訊,需要做到重啟後可以恢復訊息佇列,訊息系統一般都會採用持久化機制。 ActiveMQ的訊息持久化機制有JDBC,AMQ,KahaDB和LevelDB,無論使用哪種持久化方式,訊息的儲存邏輯都是一致的。 就是在傳送者將訊息傳送出去後,訊息中心

ActiveMQ訊息傳送和確認機制

ActiveMQ訊息傳送機制:Producer客戶端使用來發送訊息的, Consumer客戶端用來消費訊息; 它們的協同中心就是ActiveMQ broker,broker也是讓producer和consumer呼叫過程解耦的工具,最終實現了非同步RPC/資料交換的功能。 隨

ActiveMQ訊息持久化儲存策略

   ActiveMQ的核心是Java編寫的,也就是說如果服務端沒有Java執行環境ActiveMQ是無法執行的。ActiveMQ啟動時,啟動指令碼使用wrapper包裝器來啟動JVM。JVM相關的配置資訊在啟動目錄的“wrapper.conf”配置檔案中。各位讀者可以通過改變其中的配置項

ActiveMQ的queue以及topic兩種訊息處理機制分析

Q來作為jms匯流排,並且給大家介紹了activeMQ的叢集和高可用部署方案,本期給大家再介紹下,如何根據自己的專案需求,更好地使用activeMQ的兩種訊息處理模式。 1    queue與topic的技術特點對比 Topic Queue 概要 Publish Subscribe mes

Activemq資料安全機制——Activemq中的KahaDB訊息日誌的恢復機制

  KahaDB 支援多種機制在系統異常關閉後重啟並恢復。包括檢測資料檔案丟失和還原損壞的metadata。這些特性並不能完全保證系統異常關閉不造成訊息丟失。如果需要保證系統的高可靠性,建議部署到容災

JMS訊息傳送機制ActiveMQ

JMS(Java Message Service) 訊息服務是一個面向訊息中介軟體(MOM)的API,用於在兩個應用程式之間,或者分散式系統中傳送訊息消費訊息,進行非同步通訊,資料互動。JMS提供的A

ActiveMQ訊息儲存持久化(一)

                                 ActiveMQ的訊息儲存持久化(一) 概述 ActiveMQ不僅支援persistent和non-persistent兩種方式,還支援訊息的恢復(recovery)方式。 PTP Queue的儲存是很