213.8. LevelDB


从 Camel 2.10 开始提供

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

它提供的当前功能:

  • LevelDBAggregationRepository

213.8.1. 使用 LevelDBAggregationRepository

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

它有以下选项:

选项类型描述

repositoryName

字符串

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

persistentFileName

字符串

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

levelDBFile

LevelDBFile

使用现有的配置的 org.apache.camel.component.leveldb.LevelDBFile 实例。

同步

布尔值

Camel 2.12: LevelDBFile 是否应该在写入时同步。默认值为 false。通过同步写入可确保其始终等待所有写入被假脱机到磁盘,因此不会松散更新。有关 async 与同步写入的详情,请参阅 LevelDB 文档。

returnOldExchange

布尔值

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

useRecovery

布尔值

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

recoveryInterval

long

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

maximumRedeliveries

int

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

deadLetterUri

字符串

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

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

213.8.2. 持久性时会保留什么

LevelDBAggregationRepository 将仅保留任何 Serial iz 兼容消息正文数据类型。消息标头必须原语 / 字符串 / 号 / 等。如果数据类型不是此类类型,则代表其被丢弃,并记录 WARN。它仅保留 消息正文 和消息标头。Exchange 属性 不会被保留

213.8.3. 恢复

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

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

标头类型描述

Exchange.REDELIVERED

布尔值

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

Exchange.REDELIVERY_COUNTER

整数

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

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

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

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

213.8.3.1. 在 Java DSL 中使用 LevelDBAggregationRepository

在本例中,我们希望在 target/data/leveldb.dat 文件中保留聚合的消息。

213.8.3.2. 在 Spring XML 中使用 LevelDBAggregationRepository

相同的示例,但使用 Spring XML:

213.8.4. 依赖项

要在 camel 路由中使用 LevelDB,您需要对 camel-leveldb 添加依赖项。

如果您使用 maven,您只需在 pom.xml 中添加以下内容,替换最新和最佳发行版本的版本号(请参阅最新版本的下载页面)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-leveldb</artifactId>
  <version>2.10.0</version>
</dependency>

213.8.5. 另请参阅

  • 配置 Camel
  • 组件
  • 端点
  • 开始使用
  • 聚合器
  • HawtDB
  • 组件
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.