第129章 HawtDB (非推奨)

Camel 2.3 の時点で利用可能

HawtDB は非常に軽量で組み込み可能なキー値データベースです。Camel と一緒に、Aggregator などのさまざまな Camel 機能の永続的なサポートを提供できます。

それが提供する現在の機能:

  • HawtDBAggregationRepository

非推奨

HawtDB プロジェクトは非推奨になり、軽量で埋め込み可能なキー値データベースとして leveldb に置き換えられています。leveldb を簡単に使用できるようにするための leveldbjni プロジェクトがあります。Apache ActiveMQ プロジェクトは、今後 kahadb を置き換えるために、主要なファイルベースのメッセージストアとして leveldb を使用することを計画しています。

これの代わりに使用することをお勧めする camel-leveldb コンポーネントがあります。

HawtDB 1.4 以前の問題

HawtDB 1.4 以前にはバグがあり、ファイルストアが未使用のスペースを解放しません。これは、ファイルが増え続けることを意味します。これは、Camel 2.5 以降に同梱されている HawtDB 1.5 で修正されています。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-hawtdb</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

それが提供する現在の機能:

  • HawtDBAggregationRepository

129.1. HawtDBAggregationRepository の使用

HawtDBAggregationRepositoryAggregationRepository であり、その場で集約されたメッセージを永続化します。デフォルトのアグリゲーターはメモリー内のみの AggregationRepository を使用するため、これによりメッセージが失われないことが保証されます。

以下のオプションがあります。

オプションタイプ説明

repositoryName

String

必須のリポジトリー名。複数のリポジトリーに共有 HawtDBFile を使用できるようにします。

persistentFileName

String

永続ストレージのファイル名。起動時にファイルが存在しない場合は、新しいファイルが作成されます。

bufferSize

int

ファイルストアにマップされるメモリーセグメントバッファーのサイズ。デフォルトでは 8MB です。値はバイト単位です。

sync

boolean

HawtDBFile が書き込み時に同期するかどうか。デフォルトは true です。書き込み時に同期することにより、すべての書き込みがディスクにスプールされるのを常に待機するため、更新が失われることはありません。このオプションを無効にすると、HawtDB は多数の書き込みをまとめたときに自動同期します。

pageSize

short

メモリーページのサイズ。デフォルトでは 512 バイトです。値はバイト単位です。

hawtDBFile

HawtDBFile

既存の設定済み org.apache.camel.component.hawtdb.HawtDBFile インスタンスを使用します。

returnOldExchange

boolean

古い既存の Exchange が存在する場合、get 操作でそれを返すかどうか。デフォルトでは、集約時に古いエクスチェンジは必要ないため、最適化するにはこのオプションは false です。

useRecovery

boolean

リカバリーが有効かどうか。このオプションはデフォルトで true です。Camel Aggregator の自動回復を有効にすると、集約されたエクスチェンジに失敗し、それらが再送信されます。

recoveryInterval

long

回復が有効になっている場合、x 回ごとにバックグラウンドタスクが実行され、失敗した交換をスキャンして回復し、再送信します。デフォルトでは、この間隔は 5000 ミリ秒です。

maximumRedeliveries

int

回復されたエクスチェンジの再配信試行の最大回数を制限できます。有効にすると、すべての再配信の試行が失敗した場合、エクスチェンジはデッドレターチャネルに移動されます。デフォルトでは、このオプションは無効となっています。このオプションを使用する場合は、deadLetterUri オプションも指定する必要があります。

deadLetterUri

String

枯渇した回復済みエクスチェンジが移動されるデッドレターチャネルのエンドポイント uri。このオプションを使用する場合、maximumRedeliveries オプションも指定する必要があります。

optimisticLocking

false

Camel 2.12: 複数の Camel アプリケーションが同じ HawtDB ベースの集計リポジトリーを共有するクラスター化された環境で必要になることが多い楽観的ロックを有効にします。

repositoryName オプションを指定する必要があります。次に、persistentFileName または hawtDBFile を指定する必要があります。

129.1.1. 持続時に保持されるもの

HawtDBAggregationRepository は、Serializable な互換性のあるデータ型のみを保持します。データ型がそのような型でない場合は削除され、WARN がログに記録されます。また、Message ボディーと Message ヘッダーのみを保持します。Exchange プロパティーは保持され ません

129.1.2. 復元

HawtDBAggregationRepository はデフォルトで、失敗したエクスチェンジを回復します。これは、永続ストア内の失敗したエクスチェンジをスキャンするバックグラウンドタスクを持つことによって行われます。checkInterval オプションを使用して、このタスクの実行頻度を設定できます。回復はトランザクションとして機能するため、Camel は失敗したエクスチェンジを回復して再配信しようとします。回復されたことが判明したエクスチェンジは、永続ストアから復元され、再送信され、再度送信されます。

次のヘッダーは、エクスチェンジが回復または再配信されるときに設定されます。

ヘッダータイプ説明

Exchange.REDELIVERED

Boolean

エクスチェンジが再配信されていることを示すために true に設定されます。

Exchange.REDELIVERY_COUNTER

Integer

1 から始まる再配信の試行。

エクスチェンジが正常に処理された場合にのみ、AggregationRepositoryconfirm メソッドが呼び出されたときに完了としてマークされます。これは、同じエクスチェンジが再び失敗した場合、成功するまで再試行されることを意味します。

オプション maximumRedeliveries を使用して、復元された特定の Exchange の再配信試行の最大回数を制限できます。maximumRedeliveries に達したときに Camel がエクスチェンジの送信先を認識できるように、deadLetterUri オプションも設定する必要があります。

このテスト など、camel-hawtdb の単体テストでいくつかの例を確認できます。

129.1.2.1. Java DSL での HawtDBAggregationRepository の使用

この例では、集計されたメッセージを target/data/hawtdb.dat ファイルに保存します。

129.1.2.2. Spring XML での HawtDBAggregationRepository の使用

同じ例ですが、代わりに Spring XML を使用しています。

129.1.3. 依存関係

camel ルートで HawtDB を使用するには、camel-hawtdb に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-hawtdb</artifactId>
  <version>2.3.0</version>
</dependency>

129.1.4. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • アグリゲーター
  • コンポーネント