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" 替换为聚合器存储库名称。