48.15. 使用基于 JDBC 的聚合存储库
JdbcAggregationRepository 是一个 AggregationRepository,用于持久保留聚合的消息。这样可确保您不会松散消息,因为默认聚合器只会在内存中使用 AggregationRepository。JdbcAggregationRepository 允许与 Camel 一起提供对聚合器的持久支持。
只有在成功处理交换后,它将被标记为 complete,当在 AggregationRepository 上调用 确认 方法时会出现这种情况。这意味着,如果同一交换再次失败,它将在成功前保持重试。
您可以使用选项 maximumRedeliveries 来限制给定恢复的交换的最大重新发送尝试次数。您还必须设置 deadLetterUri 选项,因此 Camel 知道在达到 maximumRedeliveries 时发送 Exchange 的位置。
您可以在 camel-sql 的单元测试中看到一些示例,如 JdbcAggregateRecoverDeadLetterChannelTest.java
48.15.1. 数据库 复制链接链接已复制到粘贴板!
要正常工作,每个聚合器使用两个表:聚合和完成。按照惯例,完成的名称与聚合的名称与 "_COMPLETED" 后缀相同。名称必须在 Spring bean 中使用 RepositoryName 属性配置。在以下示例中,将使用下列聚合:
这两个表的表结构定义相同:如果 String 值用作键(id),而 Blob 包含以字节数组的交换序列化。
但是,应记住一个区别: id 字段没有与表相同的内容。
在聚合 表中,保存组件用于聚合消息的关联 Id。在完成的表格中,id 保存在对应的 blob 字段中。
以下是用于创建表的 SQL 查询,将 "aggregation" 替换为您的聚合器存储库名称。