`

activemq的消息存储机制

    博客分类:
  • JAVA
 
阅读更多
activemq的消息存储机制
 原文:http://www.uml.org.cn/j2ee/201304255.asp

发布于2013-4-25

 

ctiveMQ是当下最流行和强大的开源企业消息集成组件。

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配置文件里添加上如下配置:

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的文档。

分享到:
评论

相关推荐

    7道消息队列ActiveMQ面试题!

    ActiveMQ的存储机制包括非持久化消息和持久化消息两种方式。非持久化消息存储在内存中,而持久化消息则存储在磁盘文件中。当内存中的非持久化消息过多时,ActiveMQ会将这些消息写入临时文件来腾出内存。如果磁盘空间...

    activemq in action

    这包括如何连接到ActiveMQ、ActiveMQ消息存储机制和如何保证ActiveMQ的安全性。 第三部分涉及如何使用ActiveMQ构建消息应用程序。这包括创建使用ActiveMQ的Java应用程序、如何将ActiveMQ与应用程序服务器集成以及为...

    ActiveMQ消息中间件面试专题1

    ActiveMQ 的存储机制包括内存和文件两部分。非持久化消息存储在内存,而持久化消息存储在文件系统中。服务器宕机时,持久化消息在重启后可以从文件恢复。然而,非持久化消息过多可能导致内存不足,此时会被写入临时...

    ActiveMQ消息过期时间设置和自动清除解决方案

    本文档详细介绍了在Apache ActiveMQ 5.15.3版本中如何进行消息过期时间的设置,以及如何配置自动清除机制,特别是针对死信队列的处理方式。 #### 1. 消息过期设置 ##### 参数详解 - **Message 过期则客户端不能...

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

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

    ActiveMQ消息服务器 v6.0.1.zip

    2. 高性能和可扩展性:ActiveMQ采用了高效的存储机制和网络协议,能够处理大量并发连接和高频率的消息交换。通过集群和负载均衡,可以轻松扩展以满足不断增长的需求。 3. 路由和过滤:ActiveMQ提供丰富的消息路由和...

    ActiveMQ消息中间件面试题.pdf

    ActiveMQ通过灵活的存储机制确保了即使在服务器宕机的情况下也能尽量减少数据丢失。根据消息是否需要持久化,ActiveMQ将消息分别存储在内存和文件中: - **非持久化消息**:默认情况下存储在内存中,当内存不足时会...

    activemq消息持久化所需Jar包

    本主题主要围绕“activemq消息持久化所需Jar包”展开,将深入探讨ActiveMQ的消息持久化机制及其相关依赖。 首先,了解消息持久化的概念至关重要。在分布式系统中,消息持久化是指当消息代理(如ActiveMQ)接收到...

    ActiveMQ消息总线介绍

    此外,Spring还支持消息驱动的POJO(Plain Old Java Object),这使得开发者能够更加专注于业务逻辑的编写,而不需要过多地关注底层的消息传递机制。 #### 六、ActiveMQ的高级特性 除了基本的消息传递功能外,...

    ActiveMQ消息中间件面试专题.pdf

    ActiveMQ旨在提供一种可靠的消息传递机制,以支持应用程序之间的异步通信。作为面向消息的中间件(MOM),ActiveMQ实现了JMS(Java Message Service)1.1规范,这一规范定义了企业级消息服务的标准接口和行为。 JMS...

    ActiveMQ 消息队列

    6. **高效的消息持久化机制**:ActiveMQ提供了两种持久化选项—JDBC和Journal存储,以满足不同应用的性能和可靠性需求。 7. **灵活的集群配置**:ActiveMQ的设计考虑到了高可用性和负载均衡的需求,支持客户端-...

    ActiveMQ消息服务器 v5.18.3.zip

    1. **核心消息引擎**:这是ActiveMQ的核心部分,负责接收、存储、路由和传递消息。它使用高效的内存存储和可选的持久化机制来确保高可用性和数据安全性。 2. **多种协议支持**:ActiveMQ支持多种消息协议,如JMS、...

    【面试资料】-(机构内训资料)ActiveMQ消息中间件面试题.zip

    - **消息队列**:提供消息的存储和转发,确保消息的有序性和持久性。 - **发布/订阅模式**:支持主题(Topic)和队列(Queue)两种模式,主题适合一对多的广播,队列则是一对一的消息传递。 - **事务支持**:提供...

    activeMQ mysql 持久化

    标题中的“ActiveMQ MySQL 持久化”指的是在使用ActiveMQ消息中间件时,将消息数据存储到MySQL数据库中以实现数据的持久化。ActiveMQ是Apache软件基金会的一个开源项目,它是一个功能丰富的消息代理,支持多种消息...

    ActiveMQ消息中间件面试专题.zip

    - **ActiveMQ的持久化策略**:如何配置和使用持久化,以及它的持久化存储机制。 - **消息确认机制**:了解ACK模式(自动确认、客户端确认、邓巴数确认)及其适用场景。 - **消息选择器**:如何通过消息选择器筛选...

Global site tag (gtag.js) - Google Analytics