第 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 或更早版本中有一个错误,这意味着 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

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

它有以下选项:

选项类型描述

repositoryName

字符串

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

persistentFileName

字符串

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

bufferSize

int

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

sync

布尔值

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

pageSize

short

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

hawtDBFile

HawtDBFile

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

returnOldExchange

布尔值

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

useRecovery

布尔值

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

recoveryInterval

long

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

maximumRedeliveries

int

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

deadLetterUri

字符串

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

optimisticLocking

false

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

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

130.1.1. 持久性时保留的内容

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

130.1.2. 恢复

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

当交换被恢复/冗余时,会设置以下标头:

标头类型描述

Exchange.REDELIVERED

布尔值

设置为 true,表示 Exchange 正在重新设计。

Exchange.REDELIVERY_COUNTER

整数

从 1 开始重新发送尝试。

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

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

您可以在 camel-hawtdb 的单元测试中看到一些示例,例如 此测试

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.