第 129 章 HawtDB (已弃用)
可作为 Camel 2.3 提供
HawtDB 是一个轻量级、可嵌入的键值数据库。它允许与 Camel 一起为各种 Camel 功能(如聚合器)提供持久性支持。
它提供的当前功能:
- HawtDBAggregationRepository
已弃用
HawtDB 项目已弃用,由 leveldb 替代,作为轻量级、可嵌入的键值数据库。要使用 leveldb 可轻松使用该 leveldbjni 项目。Apache ActiveMQ 项目正在计划将 leveldb 用作未来基于的主要消息存储位置,以取代 kahadb。
我们建议使用 camel-leveldb 组件替代它。
HawtDB 1.4 或更早版本的问题
HawtDB 1.4 或更早版本中存在一个错误,这意味着文件存储不会释放未使用的空间。这意味着文件在不断增长。这个问题已在带有 Camel 2.5 开始的 HawtDB 1.5 中解决。
Maven 用户需要将以下依赖项添加到其 pom.xml
中:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hawtdb</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
它提供的当前功能:
- HawtDBAggregationRepository
129.1. Using HawtDBAggregationRepository
HawtDBAggregationRepository
是一个 AggregationRepository
,它可即时保留聚合的消息。这可确保您不会松散的消息,因为默认聚合器将仅使用内存 AggregationRepository
。
它有以下选项:
选项 | 类型 | 描述 |
---|---|---|
| 字符串 |
必需的存储库名称。允许您将共享的 |
| 字符串 | 持久性存储的文件名。如果启动新文件时不存在 文件。 |
| int | 映射到文件存储的内存片段缓冲区的大小。默认其 8mb。该值以字节为单位。 |
| 布尔值 |
|
| 短 | 内存页的大小。默认情况下,它的 512 字节。该值以字节为单位。 |
| HawtDBFile |
使用现有配置的 |
| 布尔值 |
如果存在,get 操作是否应该返回旧的现有 Exchange。默认情况下,这个选项为 |
| 布尔值 |
是否启用恢复。此选项默认为 |
| long | 如果启用了恢复,则会每 x 一次运行后台任务来扫描失败的交换以进行恢复并重新提交。默认情况下,这个间隔为 5000 millis。 |
| int |
允许您限制恢复的交换尝试的最大重新传送尝试数。如果启用,如果所有重新传送尝试都失败,则 Exchange 将移到 dead letter 频道。默认情况下禁用这个选项。如果使用这个选项,则必须提供 |
| 字符串 |
一个 Dead Letter Channel 的端点 uri,其中会移动已耗尽恢复的 Exchange。如果使用这个选项,则必须提供 |
|
| Camel 2.12: 打开选择性锁定,在集群环境中通常需要多个 Camel 应用程序共享基于 HawtDB 的聚合存储库。 |
必须提供 repositoryName
选项。然后,必须提供 persistentFileName
或 hawtDBFile
。
129.1.1. 永久保留什么
HawtDBAggregationRepository
只保留任何 Serializable
兼容数据类型。如果数据类型不是这样丢弃的类型,并记录 WARN
。它只会保留 消息正文
和消息标题。Exchange
属性 不具有持久性。
129.1.2. 恢复
HawtDBAggregationRepository
默认会恢复任何失败的交换。它通过执行在持久性存储中扫描故障 Exchange 的后台任务来实现此目的。您可以使用 checkInterval
选项设置此任务运行的频率。恢复工作是确保 Camel 尝试恢复和重做失败的交换的事务。任何发现的交换将从持久性存储中恢复,并再次重新提交。
当 Exchange 被恢复/redelivered时,会设置以下标头:
标头 | 类型 | 描述 |
---|---|---|
| 布尔值 | 设置为 true 以指示 Exchange 处于红色状态。 |
| 整数 | 从 1 开始重新发送尝试。 |
只有当成功处理 Exchange 时,它才会标记为完成,当 确认
方法在 AggregationRepository
上调用时,才会将其标记为完成。这意味着,如果同一交换再次失败,它将被重试,直到成功为止。
您可以使用选项 maximumRedeliveries
来限制给定恢复的 Exchange 的最大重新传送尝试次数。您还必须设置 deadLetterUri
选项,因此 Camel 知道在点击 的最大值时要发送交换
的位置。
您可以在 camel-hawtdb 的单元测试中看到一些示例,例如: https://svn.apache.org/repos/asf/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateRecoverTest.java
129.1.2.1. 在 Java DSL 中使用 HawtDBAggregationRepository
在这个示例中,我们希望在 target/data/hawtdb.dat
文件中持续聚合的信息。
129.1.2.2. 在 Spring XML 中使用 HawtDBAggregationRepository
同一个示例,但使用 Spring XML :
129.1.3. 依赖项
要在 camel 路由中使用 HawtDB,您需要添加对 camel-hawtdb 的依赖项。
如果您使用 maven,只需在 pom.xml 中添加以下内容,替换最新和最高版本的版本号(请参阅最新版本的下载页面)。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hawtdb</artifactId> <version>2.3.0</version> </dependency>
129.1.4. 另请参阅
- 配置 Camel
- 组件
- 端点
- 开始使用
- 聚合器
- 组件