用于持久消息的kaha db消息存储

时间:2012-10-10 09:26:50

标签: java activemq message-queue persistent-data kahadb

我知道db-xx.log是日志文件,db.redo是参考文件吗?

db-xx.log存储尚未使用的消息。消费后,这些消息将从db-xx.log中删除。 db.redo通过消息ID存储消息的引用(存储在db-xx.log中)。

  1. 但是,db.data和db.free是什么?
  2. 他们的职能是什么?
  3. 我的理解是代理首先将消息存储在缓存(易失性内存)中,然后在检查点或缓存大小已满时将这些消息移动(附加)到db-xx.log。

    1. 这是对的吗?
    2. 由于

2 个答案:

答案 0 :(得分:5)

db.data包含引用未消费消息的btree页面。 db.redo是将要对db.data执行的更新的重做日志。 db.free跟踪db.data中的空闲页面。

答案 1 :(得分:2)

db.redo是索引的恢复文件(db.data)。 在activemq启动期间读取db.free并将其加载到内存中。将空闲列表加载到内存后,将删除该文件。卸载消息数据库后,空闲列表将写回db.free。

删除邮件后,队列/主题的行为会有所不同。

  • 如果是队列,它将从索引文件中删除。 B树结构将相应修改。
  • 如果是主题,只有当所有潜艇确认消息时,它才会被删除。