325.14. JDBC ベースの集約リポジトリーの使用
Camel 2.6 以降で利用可能
情報: Camel 2.6 で JdbcAggregationRepository を使用する
Camel 2.6 では、JdbcAggregationRepository が camel-jdbc-aggregator
コンポーネントで提供されます。Camel 2.7 以降では、JdbcAggregationRepository
が camel-sql
コンポーネントで提供されます。
JdbcAggregationRepository
は AggregationRepository
であり、その場で集約されたメッセージを永続化します。デフォルトのアグリゲーターはメモリー内のみの AggregationRepository
を使用するため、これによりメッセージが失われないことが保証されます。JdbcAggregationRepository
を使用すると、Camel と一緒に Aggregator の永続的なサポートを提供できます。
エクスチェンジが正常に処理された場合にのみ、AggregationRepository
で confirm
メソッドが呼び出されたときに完了としてマークされます。これは、同じエクスチェンジが再び失敗した場合、成功するまで再試行されることを意味します。
オプション maximumRedeliveries
を使用して、復元された特定の Exchange の再配信試行の最大回数を制限できます。maximumRedeliveries
に達したときに Camel がエクスチェンジの送信先を認識できるように、deadLetterUri
オプションも設定する必要があります。
このテスト など、camel-sql の単体テストでいくつかの例を確認できます。
325.14.1. データベース
操作可能にするために、各アグリゲーターは 2 つのテーブルを使用します: アグリゲーションと完了したテーブルです。慣例により、完了したものは、"_COMPLETED"
という接尾辞が付いた集約と同じ名前になります。この名前は、Spring Bean で RepositoryName
プロパティーを使用して設定する必要があります。次の例では、集約が使用されます。
両方のテーブルのテーブル構造定義は同一です。どちらの場合も、文字列値がキー (id) として使用されますが、ブロブにはバイト配列でシリアル化されたエクスチェンジが含まれます。
ただし、1 つの違いを覚えておく必要があります。テーブルによっては、id フィールドの内容が同じではありません。
集約テーブルの id は、コンポーネントがメッセージを集約するために使用する相関 ID を保持します。完成したテーブルの id には、対応する ブロブフィールドに格納されているエクスチェンジの ID が保持されます。
テーブルの作成に使用される SQL クエリーを次に示します。aggregation
をアグリゲーターリポジトリー名に置き換えてください。
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) );