activemq 持久化
转自: http://blog.csdn.net/kobejayandy/article/details/50736479
消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试。消息中心启动以后首先要检查制定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。
1、AMQ
AMQ适用于ActiveMQ5.3之前的版本。默认配置如下:
|
1
2
3
|
<persistenceAdapter> <amqPersistenceAdapter directory="activemq-data"maxFileLength="32mb"/></persistenceAdapter> |
属性如下:
|
属性名称 |
默认值 |
描述 |
|
directory |
activemq-data |
消息文件和日志的存储目录 |
|
useNIO |
true |
使用NIO协议存储消息 |
|
syncOnWrite |
false |
同步写到磁盘,这个选项对性能影响非常大 |
|
maxFileLength |
32Mb |
一个消息文件的大小 |
|
persistentIndex |
true |
消息索引的持久化,如果为false,那么索引保存在内存中 |
|
maxCheckpointMessageAddSize |
4kb |
一个事务允许的最大消息量 |
|
cleanupInterval |
30000 |
清除操作周期,单位ms |
|
indexBinSize |
1024 |
索引文件缓存页面数,缺省为1024,当amq扩充或者缩减存储时,会锁定整个broker,导致一定时间的阻塞,所以这个值应该调整到比较大,但是代码中实现会动态伸缩,调整效果并不理想。 |
|
indexKeySize |
96 |
索引key的大小,key是消息ID |
|
indexPageSize |
16kb |
索引的页大小 |
|
directoryArchive |
archive |
存储被归档的消息文件目录 |
|
archiveDataLogs |
false |
当为true时,归档的消息文件被移到directoryArchive,而不是直接删除 |
2、KahaDB
|
1
2
3
|
<persistenceAdapter> <kahaDB directory="activemq-data"journalMaxFileLength="32mb"/></persistenceAdapter> |
KahaDB的属性如下:
|
属性名称 |
默认值 |
描述 |
|
directory |
activemq-data |
消息文件和日志的存储目录 |
|
indexWriteBatchSize |
1000 |
一批索引的大小,当要更新的索引量到达这个值时,更新到消息文件中 |
|
indexCacheSize |
10000 |
内存中,索引的页大小 |
|
enableIndexWriteAsync |
false |
索引是否异步写到消息文件中 |
|
journalMaxFileLength |
32mb |
一个消息文件的大小 |
|
enableJournalDiskSyncs |
true |
是否讲非事务的消息同步写入到磁盘 |
|
cleanupInterval |
30000 |
清除操作周期,单位ms |
|
checkpointInterval |
5000 |
索引写入到消息文件的周期,单位ms |
|
ignoreMissingJournalfiles |
false |
忽略丢失的消息文件,false,当丢失了消息文件,启动异常 |
|
checkForCorruptJournalFiles |
false |
检查消息文件是否损坏,true,检查发现损坏会尝试修复 |
|
checksumJournalFiles |
false |
产生一个checksum,以便能够检测journal文件是否损坏。 |
|
5.4版本之后有效的属性: |
||
|
archiveDataLogs |
false |
当为true时,归档的消息文件被移到directoryArchive,而不是直接删除 |
|
directoryArchive |
null |
存储被归档的消息文件目录 |
|
databaseLockedWaitDelay |
10000 |
在使用负载时,等待获得文件锁的延迟时间,单位ms |
|
maxAsyncJobs |
10000 |
同个生产者产生等待写入的异步消息最大量 |
|
concurrentStoreAndDispatchTopics |
false |
当写入消息的时候,是否转发主题消息 |
|
concurrentStoreAndDispatchQueues |
true |
当写入消息的时候,是否转发队列消息 |
|
5.6版本之后有效的属性: |
||
|
archiveCorruptedIndex |
false |
是否归档错误的索引 |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<persistenceAdapter> <mKahaDBdirectory="${activemq.base}/data/kahadb"> <filteredPersistenceAdapters> <!-- match all queues --> <filteredKahaDBqueue=">"> <persistenceAdapter> <kahaDBjournalMaxFileLength="32mb"/> </persistenceAdapter> </filteredKahaDB> <!-- match all destinations --> <filteredKahaDB> <persistenceAdapter> <kahaDBenableJournalDiskSyncs="false"/> </persistenceAdapter> </filteredKahaDB> </filteredPersistenceAdapters> </mKahaDB></persistenceAdapter> |
如果filteredKahaDB的perDestination属性设置为true,那么匹配的目标队列将会得到自己对应的KahaDB实例。配置如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<persistenceAdapter> <mKahaDBdirectory="${activemq.base}/data/kahadb"> <filteredPersistenceAdapters> <!-- kahaDB per destinations --> <filteredKahaDB perDestination="true"> <persistenceAdapter> <kahaDBjournalMaxFileLength="32mb" /> </persistenceAdapter> </filteredKahaDB> </filteredPersistenceAdapters> </mKahaDB></persistenceAdapter> |
3、JDBC
配置JDBC适配器:
|
1
2
3
|
<persistenceAdapter> <jdbcPersistenceAdapterdataSource="#mysql-ds" createTablesOnStartup="false" /></persistenceAdapter> |
dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
Mysql持久化bean:<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/> <property name="username" value="activemq"/> <property name="password" value="activemq"/> <property name="poolPreparedStatements" value="true"/></bean>SQL Server持久化bean:<bean id="mssql-ds" class="net.sourceforge.jtds.jdbcx.JtdsDataSource" destroy-method="close"> <property name="serverName" value="SERVERNAME"/> <property name="portNumber" value="PORTNUMBER"/> <property name="databaseName" value="DATABASENAME"/> <property name="user" value="USER"/> <property name="password" value="PASSWORD"/></bean>Oracle持久化bean:<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:@10.53.132.47:1521:activemq"/> <property name="username" value="activemq"/> <property name="password" value="activemq"/> <property name="maxActive" value="200"/> <property name="poolPreparedStatements" value="true"/></bean>DB2持久化bean:<bean id="db2-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/> <property name="url" value="jdbc:db2://hndb02.bf.ctc.com:50002/activemq"/> <property name="username" value="activemq"/> <property name="password" value="activemq"/> <property name="maxActive" value="200"/> <property name="poolPreparedStatements" value="true"/> </bean> |
4、LevelDB
默认配置如下:
|
1
2
3
|
<persistenceAdapter> <levelDBdirectory="activemq-data"/></persistenceAdapter> |
属性如下:
|
属性名称 |
默认值 |
描述 |
|
directory |
"LevelDB" |
数据文件的存储目录 |
|
readThreads |
10 |
系统允许的并发读线程数量 |
|
sync |
true |
同步写到磁盘 |
|
logSize |
104857600 (100 MB) |
日志文件大小的最大值 |
|
logWriteBufferSize |
4194304 (4 MB) |
日志数据写入文件系统的最大缓存值 |
|
verifyChecksums |
false |
是否对从文件系统中读取的数据进行校验 |
|
paranoidChecks |
false |
尽快对系统内部发生的存储错误进行标记 |
|
indexFactory |
org.fusesource.leveldbjni.JniDBFactory, org.iq80.leveldb.impl.Iq80DBFactory |
在创建LevelDB索引时使用 |
|
indexMaxOpenFiles |
1000 |
可供索引使用的打开文件的数量 |
|
indexBlockRestartInterval |
16 |
Number keys between restart points for delta encoding of keys. |
|
indexWriteBufferSize |
6291456 (6 MB) |
内存中索引数据的最大值 |
|
indexBlockSize |
4096 (4 K) |
每个数据块的索引数据大小 |
|
indexCacheSize |
268435456 (256 MB) |
使用缓存索引块允许的最大内存 |
|
indexCompression |
snappy |
适用于索引块的压缩类型 |
|
logCompression |
none |
适用于日志记录的压缩类型 |
activemq 持久化的更多相关文章
- ActiveMQ持久化方式(转)
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息 中心重新启动后仍然可以将消息发送出去,如果把这种持久化 ...
- ActiveMQ持久化方式
ActiveMQ持久化方式 发表于8个月前(2014-09-04 15:55) 阅读(686) | 评论(0) 17人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点击免费学习 摘要 ...
- ActiveMQ持久化及测试(转)
转:http://blog.csdn.net/xyw_blog/article/details/9128219 ActiveMQ持久化 消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持 ...
- ActiveMQ入门之四--ActiveMQ持久化方式
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和 ...
- ActiveMQ持久化到MySQL以及使用SSL协议通讯
最近公司事情稍微少了点,研究下怎么优化几个系统的交互,因为我们目前使用的是长链接的同步接口,就考虑用下MQ来处理下.由于公司对安全有要求且和CA业务有关,则使用了SSL协议.此文使用的是Activem ...
- ActiveMQ持久化机制和JMS可靠消息
1.ActiveMQ持久化机制 1.1 JDBC将数据持久化到数据库 1.2 AMQ生成日志文件 1.3 KahaDB:本次磁盘生成数据文件(默认) 1.4 LevelDB:谷歌K/V数据库 1.5 ...
- ActiveMQ持久化消息
ActiveMQ的另一个问题就是只要是软件就有可能挂掉,挂掉不可怕,怕的是挂掉之后把信息给丢了,所以本节分析一下几种持久化方式: 一.持久化为文件 ActiveMQ默认就支持这种方式,只要在发消息时设 ...
- ActiveMQ持久化消息(转)
ActiveMQ的另一个问题就是只要是软件就有可能挂掉,挂掉不可怕,怕的是挂掉之后把信息给丢了,所以本节分析一下几种持久化方式: 一.持久化为文件 ActiveMQ默认就支持这种方式,只要在发消息时设 ...
- ActiveMQ持久化消息的三种方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt362 本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面 ...
- ActiveMq持久化数据
A:持久化为文件 这个你装ActiveMQ时默认就是这种,只要你设置消息为持久化就可以了.涉及到的配置和代码有 <persistenceAdapter> <kahaDB direct ...
随机推荐
- Python 基础 函数
python 什么是函数 Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用. python 函数的调用 Python内置了很多有用的函数,我们可以直接调用. 要调用 ...
- ztz11的noip模拟赛T1:愤怒的XiaoX
链接: https://www.luogu.org/problemnew/show/U47231 思路: 这道题其实就是一道双Lazy线段树裸题 因为我们知道,当k一定时,取反偶数次最后k位等于不取反 ...
- 【ZOJ 2996】(1+x)^n(二项式定理)
Please calculate the coefficient modulo 2 of x^i in (1+x)^n. Input For each case, there are two inte ...
- Mysql浅析-基础命令(一)
主要从以上篇幅来介绍mysql的一些知识点 一.Mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数 ...
- centos 7 配置nginx 的yum源
在/etc/yum.repos.d里创建nginx.repo文件: touch nginx.repo vim nginx.repo 填写如下内容后保存 [nginx] name=nginx repo ...
- Bulk Rename Utility 3.0 + x64 中文汉化版
Bulk Rename Utility 3.0 + x64 中文汉化版由大眼仔旭(www.dayanzai.me)汉化发布.当发现做一件事情,原本用工具或软件进行批量处理也能达到相同效果,可却花了数倍 ...
- 大数据学习--day14(String--StringBuffer--StringBuilder 源码分析、性能比较)
String--StringBuffer--StringBuilder 源码分析.性能比较 站在优秀博客的肩上看问题:https://www.cnblogs.com/dolphin0520/p/377 ...
- mapreduce使用 left outer join 的几种方式
需求 数据: [主表]:存放在log.txt中 -------------------------------------------------------- 手机号码 品牌类型 登录时间 在线时长 ...
- Chino 操作系统开发日志 (1) - 为 IoT 而生
引言 很多人都听说过 IoT (物联网)这个词,越来越多的人在装修时开始选择智能家居,很多人也购买智能音箱做智能家居控制,想必未来一定是 AI + 物联网的时代. 一种技术要发展并走向成熟必须要降低门 ...
- 关于LP64,ILP64,LLP64,ILP32,LP32字长(数据)模型
太长不看: 1.32位Windows和类Unix使用ILP32字长模型,64位Windows使用ILP64模型,64位类Unix使用LP64字长模型. 2.根据1,long在32位和64位Window ...