第 130 章 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

130.1. Using HawtDBAggregationRepository

HawtDBAggregationRepository 是一个 AggregationRepository,它可即时保留聚合的消息。这可确保您不会松散的消息,因为默认聚合器将仅使用内存 AggregationRepository

它有以下选项:

选项类型描述

repositoryName

字符串

必需的存储库名称。允许您将共享的 HawtDBFile 用于多个存储库。

persistentFileName

字符串

持久性存储的文件名。如果启动新文件时不存在 文件。

bufferSize

int

映射到文件存储的内存片段缓冲区的大小。默认其 8mb。该值以字节为单位。

sync

布尔值

HawtDBFile 是否应该同步写操作。默认为 true。通过同步写操作,确保其始终等待所有写入操作到磁盘,因此不会松散更新。如果您禁用这个选项,则 HawtDB 会在有多个写入时自动同步。

pageSize

内存页的大小。默认情况下,它的 512 字节。该值以字节为单位。

hawtDBFile

HawtDBFile

使用现有配置的 org.apache.camel.component.hawtdb.HawtDBFile 实例。

returnOldExchange

布尔值

如果存在,get 操作是否应该返回旧的现有 Exchange。默认情况下,这个选项为 false 以优化,因为我们在聚合时不需要旧的交换。

useRecovery

布尔值

是否启用恢复。此选项默认为 true。启用 Camel 聚合器自动恢复失败的聚合交换时,它们被重新提交。

recoveryInterval

long

如果启用了恢复,则会每 x 一次运行后台任务来扫描失败的交换以进行恢复并重新提交。默认情况下,这个间隔为 5000 millis。

maximumRedeliveries

int

允许您限制恢复的交换尝试的最大重新传送尝试数。如果启用,如果所有重新传送尝试都失败,则 Exchange 将移到 dead letter 频道。默认情况下禁用这个选项。如果使用这个选项,则必须提供 deadLetterUri 选项。

deadLetterUri

字符串

一个 Dead Letter Channel 的端点 uri,其中会移动已耗尽恢复的 Exchange。如果使用这个选项,则必须提供 最大值的Redeliveries 选项。

optimisticLocking

false

Camel 2.12: 打开选择性锁定,在集群环境中通常需要多个 Camel 应用程序共享基于 HawtDB 的聚合存储库。

必须提供 repositoryName 选项。然后,必须提供 persistentFileNamehawtDBFile

130.1.1. 永久保留什么

HawtDBAggregationRepository 只保留任何 Serializable 兼容数据类型。如果数据类型不是这样丢弃的类型,并记录 WARN。它只会保留 消息正文 和消息标题。Exchange 属性 不具有持久性

130.1.2. 恢复

HawtDBAggregationRepository 默认会恢复任何失败的交换。它通过执行在持久性存储中扫描故障 Exchange 的后台任务来实现此目的。您可以使用 checkInterval 选项设置此任务运行的频率。恢复工作是确保 Camel 尝试恢复和重做失败的交换的事务。任何发现的交换将从持久性存储中恢复,并再次重新提交。

当 Exchange 被恢复/redelivered时,会设置以下标头:

标头类型描述

Exchange.REDELIVERED

布尔值

设置为 true 以指示 Exchange 处于红色状态。

Exchange.REDELIVERY_COUNTER

整数

从 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

130.1.2.1. 在 Java DSL 中使用 HawtDBAggregationRepository

在这个示例中,我们希望在 target/data/hawtdb.dat 文件中持续聚合的信息。

130.1.2.2. 在 Spring XML 中使用 HawtDBAggregationRepository

同一个示例,但使用 Spring XML :

130.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>

130.1.4. 另请参阅

  • 配置 Camel
  • 组件
  • 端点
  • 开始使用
  • 聚合器
  • 组件