文档章节

ActiveMQ Messages Store(未完待续)

年少爱追梦
 年少爱追梦
发布于 2016/05/04 21:46
字数 773
阅读 234
收藏 2

                                                                       ActiveMQ   Messages Store

    ActiveMQ消息的持久化,在很多需要同步的消息的下很关键,当一个消费者挂了后,确保以前消息能够接受,这个时候就必须用到消息的持久化存储。ActiveMQ主要提供了以下几种策略进行配置:

    1.The KahaDB message store

    先看一下java 代码的编写

        BrokerService broker = new BrokerService();
        File dataFileDir = new File("../amq-in-action/kahadb1");
        KahaDBStore kaha = new KahaDBStore();
        kaha.setDirectory(dataFileDir);
        kaha.setJournalMaxFileLength(1024*1204*10);
        kaha.setConcurrentStoreAndDispatchTopics(true);
        kaha.setIndexWriteBatchSize(100);
        kaha.setEnableIndexWriteAsync(false);
        broker.setPersistenceAdapter(kaha);//使用KahaDB,做持久化存储
        broker.addConnector("tcp://localhost:61618");

     很明显我们可以看到,KahaDB 是一个基于文件的持久化策略。看一些内部实现的原理:

                                                   

    从上图我们可以看到,我们指定的目录下,生成了几个文件:db.data db.redo db-1.log。

    在db-xx.log文件中记录的是:一个消息和命令滚动日志(如事务边界和信息删除等),当超过文件存储最大长度就会再建一个心得db.log文件。

    db.data文件是:消息转变成持久性B树索引的数据。

    db.redo 文件是:用于重新修改db.data中B树索引结构的,用于回收db-xx.log的这些文件。

    值得一体的是,cache是用来缓存数据的,没有第一时间写入磁盘,有多个生成者的时候,在对共同消息修改时,会写到磁盘。在消费者立刻响应收到的情况下,不写入磁盘立即丢弃。

    一些比较关键的参数配置:

Property name Default value Description
directory activemq-data 设置的目录位置及名字
indexWriteBatchSize 1000 批处理磁盘上写的索引页的数量
indexCacheSize 10000 在内存中缓存页面的数量
enableIndexWriteAsync false 能否异步写入索引
journalMaxFileLength 32mb 每一个db-xx.log日志文件的大小
enableJournalDiskSyncs true 磁盘同步写数据
cleanupInterval 30000 多少时间去清理一些存储但不再使用的文件数据
checkpointInterval 5000 检测内部关键点(不知道用处)
ignoreMissingJournalfiles false  如果启用,将忽略丢失的日志文件
checkForCorruptJournalFiles false 如果启用,在启动时会验证消息数据日志没有被损坏。
checksumJournalFiles false

如果启用,将提供一个校验和对每个消息数据日志

archiveDataLogs false 如果启用,将将消息数据记录到归档目录,而不是删除它
directoryArchive null 定义目录以将数据记录移动到包含已被消耗的所有消息
databaseLockedWaitDelay 10000 限制时间内获得数据库锁
maxAsyncJobs 10000 将最大排队的数量的消息进行异步存储
concurrentStoreAndDispatchTransactions true 客户端进行事务存储
concurrentStoreAndDispatchTopics true 使客户进行话题信息存储
concurrentStoreAndDispatchQueues true 使客户进行队列信息存储

   2.The AMQ message store

    暂时略过,和第一个很想,有时间再补上。

    3.The JDBC message store

//配置数据源
		BasicDataSource datasource=new BasicDataSource();
		datasource.setDriverClassName("com.mysql.jdbc.Driver");
		datasource.setUrl("jdbc:mysql://localhost/activemq?relaxAutoCommit=true");
		datasource.setUsername("root");
		datasource.setPassword("xxxx");
		datasource.setMaxActive(20);
		datasource.setPoolPreparedStatements(true);
		JDBCPersistenceAdapter  jpa=new JDBCPersistenceAdapter(); 
		jpa.setDataSource(datasource);
	/*	DefaultJDBCAdapter dja=new DefaultJDBCAdapter();*/
		/*JDBCTopicMessageStore jts=new JDBCTopicMessageStore(jpa,dja, null, null, null);*/
		BrokerService broker = new BrokerService();
		broker.setPersistenceAdapter(jpa);
		broker.addConnector("tcp://localhost:61618");
		broker.start();

    4.The memory message store

© 著作权归作者所有

年少爱追梦
粉丝 35
博文 195
码字总数 120647
作品 0
杭州
程序员
私信 提问
activemq集群假死

现象是:进程都还在,但是端口已经不监听,查看日志发现以下错误,集群重启后就好了,这个情况大家碰到过吗,有规避的办法吗,在这里先谢谢了 2017-01-04 04:43:12,184 | WARN | listeners a...

youarepp
2017/01/05
1K
3
[ActiveMQ]初识ActiveMQ

初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:http://activemq.apache.org/download.html 历史版本下载链接...

candy-yun
2016/10/29
0
0
activeMq5.5版本正常启动 5.10.2版本启动结果如下,求高人解答

进入bin目录下启动 activemq.bat 就出现下面的结果,应该是版本问题。求有缘人解答 Java Runtime: Oracle Corporation 1.7.0_79 D:\jdk7\jre Heap sizes: current=1005568k free=989808k ma...

沐阳6011
2015/08/21
848
1
构建ActiveMQ源代码报IOException

使用NetBeans构建activemq-parent-5.14.5-source-release的时候报错: testRecoveryOnArchiveFailure(org.apache.activemq.store.kahadb.JournalArchiveTest) Time elapsed: 3.444 sec <<< ......

kaiyuancn
2017/05/23
105
0
ActiveMQ-inAction-Broker-学习笔记

Running Broker(运行 broker) ActiveMQ5.0 的二进制发布包中bin 目录中包含一个名为activemq 的脚本, 直接运行这个脚本就可以启动一个broker。 此外也可以通过一下对其进行配置: Broker...

Java搬砖工程师
2018/12/24
57
0

没有更多内容

加载失败,请刷新页面

加载更多

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

原文作者:Xuejie 原文链接:https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用...

NervosCommunity
54分钟前
5
0
通过OAuth2.0 获取授权访问SF 用户数据

通过OAuth2.0 获取授权访问SF 用户数据 OAuth2.0 相关知识 深入了解 Salesforce 中的 OAuth 2.0(SF官方) OAuth 2.0 的一个简单解释(阮一峰大神) OAuth 2.0 的四种方式(阮一峰大神) GitHub OA...

在山的那边
今天
7
0
编写程序:从键盘上接受一个三位数(首先要确保是三位数),计算出各位之和输出。

#include<stdio.h> int main() { int a,sum=0; printf("请输入一个三位数:\n"); scanf("%d",&a); sum=a/100+a%100/10+a%10; printf("这三个数的和:%d",sum); return 0; }......

201905021729吴建森
今天
7
0
如何离开/退出/停用Python virtualenv

我正在使用virtualenv和virtualenvwrapper。 我可以使用workon命令在virtualenv之间切换。 me@mymachine:~$ workon env1(env1)me@mymachine:~$ workon env2(env2)me@mymachine:~$ workon e......

技术盛宴
今天
7
0
成长之路 万事坚持难

任何事情开了头,想要更好的发展下去,不忘初心,就一定要坚持下去。 以前自己坚持了一些事情,比如早睡不吃东西,由于中途断了,没有及时止损,导致又接着恶习断了几天。所以 及时的反省和调...

T型人才追梦者
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部