326.13. 使用基于 JDBC 的幂等存储库


从 Camel 2.7 开始提供 :在本节中,我们将使用基于 JDBC 的幂等存储库。

TIP:*Abstract 类来自 Camel 2.9 开始,有一个抽象类 org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository,您可以扩展来构建自定义 JDBC 幂等存储库。

首先,我们必须创建将由幂等存储库使用的数据库表。对于 Camel 2.7,我们使用以下模式:

CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
messageId VARCHAR(100) )

Camel 2.8 中,我们添加了 createdAt 列:

CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
messageId VARCHAR(100), createdAt TIMESTAMP )

警告:SQL Server TIMESTAMP 类型是一个固定长度的二进制字符串类型。它没有映射到任何 JDBC 时间类型: DATETIMETIMESTAMP

自定义 JdbcMessageIdRepository

Camel 2.9.1 开始,您可以根据您的需要调整 org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository 的选项:

参数默认值描述

createTableIfNotExists

true

定义 Camel 是否是否应该尝试创建表(如果不存在)。

tableExistsString

SELECT 1 FROM CAMEL_MESSAGEPROCESSED WHERE 1 = 0

此查询用于找出表是否已存在。它必须抛出异常,以指示该表不存在。

createString

CREATE TABLE CAMEL_MESSAGEPROCESSED (processorName VARCHAR (255), messageId VARCHAR (100), createdAt TIMESTAMP)

用于创建表的声明。

queryString

SELECT COUNT(*) FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ?

用于找出存储库中是否已存在消息的查询(结果不等于 '0')。它采用两个参数。第一个是处理器名称(String),第二个是消息 id (String)。

insertString

INSERT INTO CAMEL_MESSAGEPROCESSED (processorName, messageId, createdAt) VALUES (?, ?, ?)

用于将条目添加到表中的语句。它采用三个参数。第一个是处理器名称(String),第二个是消息 id (String),第三个是此条目添加到存储库时的时间戳(java.sql.Timestamp)。

deleteString

DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ?

用于从数据库中删除条目的声明。它取两个参数。第一个是处理器名称(String),第二个是消息 id (String)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.