-
Notifications
You must be signed in to change notification settings - Fork 1
ActiveMQ In Action读书笔记(三)
18965050 edited this page Dec 12, 2016
·
3 revisions
ActiveMQ消息可以持久化, 也可以非持久化. <broker>标签的persistent
属性设置为true, 且使用persistenceAdapter
标签来进行具体的存储机制设置. 另外, 针对queue和topic方式消息存储也不一样: queue方式下消息按照FIFO的方式存储; topic方式下由于一个消息被多个consumer消费, 因此不能一个消费者消费后就删除
KahaDB是5.3版本后默认的存储方式. 组成包括:
- data logs:多个数据日志, 数据被添加到文件末尾. 文件名格式为 db-.log. 当一个日志文件写满时, 会重新创建新的日志文件, 同时Number也会增大. 当消息没有被引用时, 就可以归档会删除
- cache: 存放被活跃consumer消费的消息数据
- BTree indexes: 数据日志中消息的MessageID索引
Kahadb的属性配置:
AMQ类似于KahaDB,也是采用文件保存日志文件和索引文件. 但其有个比较劣势的地方: 每个destination都会生成一个新的索引, 而每个索引会用两个文件来保存. 因此对于存在大量destination的时候,不要使用AMQ
AMQ也由三部分组成:
- data logs: 日志记录文件
- cache: 缓存部分
- reference store: 类似于KahaDB中的BTree Index
AMQ的属性配置:
消息持久化到数据库中,会用到三张表:
- ACTIVEMQ_MSGS: 消息表
- ACTIVEMQ_ACKS: 消息响应表
- ACTIVEMQ_LOCK: 锁表. 只运行一个broker使用
当设置<broker>标签的persistent为false时(此属性默认为true),表示使用memory
适用于nondurable topic consumers.使用PERSISTENT方式来保存消息有时候会比较慢.同时, 有些情况下, client只会短暂的不可用. 这时就可以不用持久化消息,而使用subscription recovery policy. subscription recovery policy使用标签<subscriptionRecoveryPolicy>来表示,可对topic destination进行配置. ActiveMQ中提供了如下的策略:
- FixedSizedSubscriptionRecoveryPolicy
- FixedCountSubscriptionRecoveryPolicy
- QueryBasedSubscriptionRecoveryPolicy
- TimedSubscriptionRecoveryPolicy
- LastImageSubscriptionRecoveryPolicy: 只保存最后一条信息
- NoSubscriptionRecoveryPolicy: 使topic中的message recovery失效