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 协作图如下:

activemq 命令行清空_activemq

AMQ Message Store的属性是可以配置的,你可以在conf/activemq.xml配置文件里添加上如下配置:

Xml代码

属性说明

AMQ Message Store体系中 目录结构参照下图 :

activemq 命令行清空_activemq 命令行清空_02

顶层目录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代码

改成AMQ Message Store and JDBC(推荐,同时使用两者可以同时保证效率和可靠性):

Xml代码

或是 JDBC only(现阶段不推荐,单独的JDBC存储效率不高):

Xml代码

Oracle数据源的配置如下:

Xml代码

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

其他数据源配置参照Activemq的文档。