46.15. 使用基于 JDBC 的聚合存储库
JdbcAggregationRepository
是一个 AggregationRepository
,它在同时保留聚合的消息。这可确保您不会松散消息,因为默认聚合器将仅在内存中使用 AggregationRepository
。JdbcAggregationRepository
允许与 Camel 一起为聚合器提供持久支持。
只有成功处理 Exchange 时,将在 AggregationRepository
上调用 确认
方法时将其标记为 complete。这意味着,如果同样的 Exchange 再次失败,它将被重试,直到成功为止。
您可以使用选项 maximumRedeliveries
来限制给定恢复的 Exchange 进行的重新发送尝试的最大数量。您还必须设置 deadLetterUri
选项,以便 Camel 知道在 最大的国家/地区点击
时发送 Exchange 的位置。
您可以在 camel-sql 的单元测试中看到一些示例,例如 JdbcAggregateRecoverDeadLetterChannelTest.java
46.15.1. 数据库
要操作,每个聚合器使用两个表:聚合和完成一个表。按照惯例,完成的名称与带有 "_COMPLETED"
后缀的聚合的名称相同。名称必须在 Spring bean 中配置,并包含 RepositoryName
属性。下例中的聚合将用于:
两个表的表结构定义相同:当 String 值用作键(1)时,而 Blob 则包含在字节阵列中的交换序列化。
但是,应该记住一个区别: id 字段不能有相同的内容,具体取决于表。
在聚合表中,ID 持有组件用来聚合消息的关联 Id。在完成的表中,id 保管存储在对应 blob 字段中的交换的 id。
以下是用于创建表的 SQL 查询,只需将 "aggregation"
替换为聚合器存储库名称。
CREATE TABLE aggregation ( id varchar(255) NOT NULL, exchange blob NOT NULL, version BIGINT NOT NULL, constraint aggregation_pk PRIMARY KEY (id) ); CREATE TABLE aggregation_completed ( id varchar(255) NOT NULL, exchange blob NOT NULL, version BIGINT NOT NULL, constraint aggregation_completed_pk PRIMARY KEY (id) );