java的消息机制协议_activemq的消息存储机制 - 幸福的懦夫 - JavaEye技术网站

/**

*  转载请注明作者longdick    http://longdick.javaeye.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 协作图如下:

4297293_1.png

AMQ Message Store的属性是可以配置的,

你可以在conf/activemq.xml配置文件里添加上如下配置:

Xml代码

属性说明

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体系中

目录结构参照下图 :

4297293_2.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你想了解如何使用Java连接ActiveMQ并查看topic消息,可以按照以下步骤操作: 1. 下载并安装ActiveMQ。可以从官网下载最新的ActiveMQ安装包,并按照安装向导进行安装。 2. 创建Java项目并导入ActiveMQ相关的jar包。可以使用Maven管理项目依赖,添加以下依赖: ```xml <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.2</version> </dependency> ``` 3. 创建连接和会话。可以使用以下代码创建连接和会话: ```java // 创建连接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); // 创建连接 Connection connection = connectionFactory.createConnection(); // 启动连接 connection.start(); // 创建会话 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); ``` 4. 创建topic和消息消费者。可以使用以下代码创建topic和消息消费者: ```java // 创建topic Topic topic = session.createTopic("test.topic"); // 创建消息消费者 MessageConsumer consumer = session.createConsumer(topic); ``` 5. 接收消息。可以使用以下代码接收消息: ```java // 接收消息 Message message = consumer.receive(); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("Received message: " + textMessage.getText()); } ``` 这样就可以使用Java连接ActiveMQ并查看topic消息了。当然,还有其他更详细的操作可以参考ActiveMQ官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值