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