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