面试题答案
一键面试主要方式及关键组件
- KahaDB
- 关键组件:KahaDB是一种基于文件的持久化机制。它由日志文件、索引文件等组成。日志文件用于记录消息,索引文件用于快速定位消息。
- 工作原理:新消息到达时,会追加写入日志文件。索引文件则维护消息ID与日志文件中消息位置的映射关系,便于快速检索和读取消息。
- AMQ Message Store(旧版,已逐步被KahaDB替代)
- 关键组件:同样基于文件存储,包含数据文件和索引文件。数据文件存储消息内容,索引文件用于定位消息。
- 工作原理:消息以固定大小的记录形式写入数据文件,索引文件记录每个消息在数据文件中的位置,实现快速查找。
- JDBC持久化
- 关键组件:依赖关系数据库(如MySQL、Oracle等)。需要数据库驱动、数据库表结构。通常会创建消息表、锁表等。消息表用于存储消息,锁表用于处理并发访问时的资源锁定。
- 工作原理:消息到达时,按照定义好的表结构,将消息的相关信息(如消息内容、属性等)插入到数据库表中。在消费消息时,从数据库中读取并更新消息状态。
实际应用场景中的配置使用
- KahaDB配置
在ActiveMQ的
conf/activemq.xml
文件中,默认配置即为KahaDB。若要使用KahaDB,无需额外复杂配置,默认配置如下:
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
其中${activemq.data}
是ActiveMQ的数据目录,可根据实际情况修改directory
路径。例如,若要将KahaDB数据存储在自定义目录/var/lib/activemq/kahadb
,可修改为:
<persistenceAdapter>
<kahaDB directory="/var/lib/activemq/kahadb"/>
</persistenceAdapter>
- JDBC持久化配置
- 引入数据库依赖:将相应的数据库驱动(如MySQL的
mysql - connector - java.jar
)放入ActiveMQ的lib
目录。 - 配置数据源:在
activemq.xml
中配置数据源,例如使用MySQL:
- 引入数据库依赖:将相应的数据库驱动(如MySQL的
<bean id="mysql - dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy - method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activemq"/>
<property name="username" value="activemq"/>
<property name="password" value="activemq"/>
</bean>
- 配置JDBC持久化适配器:
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql - dataSource" dataDirectory="${activemq.data}/jdbc"/>
</persistenceAdapter>
这里dataDirectory
指定了一些与JDBC持久化相关的本地数据存储路径,同样可根据实际需求调整。同时,需要在数据库中创建好相应的表结构,ActiveMQ官方文档提供了针对不同数据库的建表脚本。