第 130 章 HawtDB (已弃用)


从 Camel 2.3 开始提供

HawtDB 是一个非常轻量且可嵌入的键值数据库。它允许与 Camel 一起为各种 Camel 功能(如 Aggregator)提供持久性支持。

它提供的当前功能:

  • HawtDBAggregationRepository

已弃用

HawtDB 项目已弃用,并替换为 leveldb 作为轻量级且可嵌入的键值数据库。要使用 leveldb 很容易地有一个 leveldbjni 项目。Apache ActiveMQ 项目正在计划将 leveldb 用作基于其主要文件的消息存储,以取代 kahadb。

我们建议使用 camel-leveldb 组件替代它。

HawtDB 1.4 或更早版本的问题

HawtDB 1.4 或更早版本存在一个程序错误,这意味着 filestore 不会释放未使用的空间。这意味着文件会保持增长。这个问题已在 HawtDB 1.5 中解决,它随 Camel 2.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. 使用 HawtDBAggregationRepository

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

它有以下选项:

选项类型描述

repositoryName

字符串

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

persistentFileName

字符串

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

bufferSize

int

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

同步

布尔值

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

pageSize

short

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

hawtDBFile

HawtDBFile

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

returnOldExchange

布尔值

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

useRecovery

布尔值

是否启用恢复。此选项默认为 true。启用 Camel Aggregator 自动恢复失败的聚合交换后,并使其重新提交。

recoveryInterval

long

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

maximumRedeliveries

int

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

deadLetterUri

字符串

将移动已耗尽恢复交换的死信频道的端点 uri。如果使用这个选项,则必须提供 maximumRedeliveries 选项。

optimisticLocking

false

Camel 2.12: 要打开 optimistic locking,通常在多个 Camel 应用程序共享基于相同 HawtDB 的聚合存储库的集群环境中需要它。

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

130.1.1. 持久性时会保留什么

HawtDBAggregationRepository 将只保留任何 Serializable 兼容数据类型。如果数据类型不是此类类型,则代表其被丢弃,并记录 WARN。它仅保留 消息正文 和消息标头。Exchange 属性 不会被保留

130.1.2. 恢复

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

当一个 Exchange 被恢复/缩减时,会设置以下标头:

标头类型描述

Exchange.REDELIVERED

布尔值

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

Exchange.REDELIVERY_COUNTER

整数

重新发送尝试,从 1 开始。

只有成功处理 Exchange 时,才会在 AggregationRepository 上调用 confirm 方法时将其标记为完成。这意味着,如果同一 Exchange 再次失败,它将被重试,直到成功为止。

您可以使用选项 maximumRedeliveries 来限制给定恢复交换的最大重新发送尝试次数。您还必须设置 deadLetterUri 选项,以便 Camel 知道在 maximumRedeliveries 命中时发送交换的位置。

您可以在 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
  • 组件
  • 端点
  • 开始使用
  • 聚合器
  • 组件
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.