The original website:http://longdick.iteye.com/blog/444632
/**
* 转载请注明作者longdick http://longdick.iteye.com
*
*/
ActiveMQ是当下最流行和强大的开源企业消息集成组件。
ActiveMQ性能优良,支持多种跨语言的客户端和协议,支持JMS1.1和J2EE1.4,易于使用并且特性多多。
ActiveMQ基于Apache 2.0 License软件协议。
当前最新版本为5.2.0
最新特性:
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的文档。
参考资料来自官方网站:
http://activemq.apache.org
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。