`
longdick
  • 浏览: 579961 次
  • 性别: Icon_minigender_1
  • 来自: 0
社区版块
存档分类
最新评论

activemq的消息存储机制

    博客分类:
  • jms
阅读更多

/**

*  转载请注明作者longdick    http://longdick.iteye.com

*

*/

 

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

6
0
分享到:
评论

相关推荐

    ActiveMQ消息传送机制以及ACK机制详解

    AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。Producer客户端使用来发送消息的,Consumer客户端...

    实战ActiveMQ集群与应用视频教程.zip

    网盘文件永久链接 1:ActiveMQ入门和消息中间件 2:JMS基本概念和模型 3:JMS的可靠性机制 4:JMS的API结构和开发步骤 ...8:ActiveMQ消息存储持久化 9:ActiveMQ的静态网络链接 10:多线程consumer访问集群 ..........

    Activemq原理文档

    本文档总结了Activemq的所有特性,包括整体架构、消息传输原理、部署、消息存储和通讯机制,文字结合图示,读了这个文档,会对Acitvemq有个非常透彻的了解

    ActiveMQ.rar

    六: ActiveMQ的消息存储 包括:队列和topic、KahaDB、AMQ、JDBC、MMS等 n 七: ActiveMQ的Network 包括:在一台服务器启动多个Broker;静态网络连接的功能、配置等;“丢失” 消息的处理;容错或可负载均衡的连接;...

    Java思维导图xmind文件+导出图片

    详解RabbitMQ消息分发机制及主题消息分发 RabbitMQ消息路由机制分析 RabbitMQ消息确认机制 Redis redis数据结构分析 Redis主从复制原理及无磁盘复制分析 Redis管道模式详解 Redis缓存与数据库一致性问题解决...

    消息队列及消息中间件

    当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等,而部分数据库如Redis、MySQL以及phxsql也可实现消息队列的功能。消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据...

    javaweb物流配货网源码

    该项目是一个物流配货平台,提供货运管理、配货管理...5. ActiveMQ实现消息队列,推送配送任务等 6. 前端使用JSP、jQuery、BootStrap实现用户交互界面 7. 货运管理、配货计划等业务流程实现 8. 权限控制和安全管理机制

    RabbitMQ

    应用解耦、异步、流量削锋、数据分发、错峰流控、日志收集等等...MQ衡量标准服务性能、数据存储、集群架构主流竞品分析当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的...

    springCloud

    用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 AMQP,即Advanced message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【消息队列】ActiveMQ中的消息重发时间间隔和重发次数吗? 164 【Dubbo】dubbo介绍 166 Dubbo 是什么 166 Dubbo 架构流程图 167 调用流程 167 注册中心 168 Dubbo常识 168 【Dubbo】dubbo运行时,突然所有的zookeeper...

    大型分布式网站架构与实践

     如何使用分布式消息系统ActiveMQ来降低系统之间的耦合度,以及进行应用间的通信。  垂直化的搜索引擎在分布式系统中的使用,包括搜索引擎的基本原理、Lucene详细的使用介绍,以及基于Lucene的开源搜索引擎工具...

    网络架构师148讲视频课程

    │ 第111节:理解文档存储机制.avi │ 第112节:MongoDB的索引一.avi │ 第113节:MongoDB的索引二.avi │ 第114节:Capped集合和GridFS.avi │ 第115节:MongoDB的副本集一.avi │ 第116节:MongoDB的副本集二.avi ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    ActiveMQ 常用开源框架 Spring Spring MVC Spring WebFlow spring tx aop ioc Struts ibatis Mybatis CAS Dubbo 工作能力 软实力 应急能力 创新能力 管理能力 分享能力 学习能力 沟通能力 ...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

Global site tag (gtag.js) - Google Analytics