轉自:http://longdick.iteye.com/blog/444632
ActiveMQ是當下最流行和強大的開源企業消息集成組件。
ActiveMQ性能優良,支持多種跨語言的客戶端和協議,支持JMS1.1和J2EE1.4,易於使用並且特性多多。
ActiveMQ基於Apache 2.0 License軟件協議。
當前最新版本爲5.2.0
最新特性:
-
多語言多協議支持,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配置文件裏添加上如下配置:
- <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,我們只需要把配置從
- <persistenceAdapter>
- <amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>
- </persistenceAdapter>
改成AMQ Message Store and JDBC(推薦,同時使用兩者可以同時保證效率和可靠性):
- <persistenceAdapter>
- <journaledJDBC dataDirectory="${activemq.base}/data" dataSource="#oracle-ds"/>
- </persistenceAdapter>
或是 JDBC only(現階段不推薦,單獨的JDBC存儲效率不高):
- <persistenceAdapter>
- <jdbcPersistenceAdapter dataSource="#oracle-ds"/>
- </persistenceAdapter>
Oracle數據源的配置如下:
- <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的文檔。
參考資料來自官方網站:
http://activemq.apache.org