第63章 HawtDB
HawtDB リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel 2.3 で利用可能
HawtDB は、非常に軽量で組み込み可能なキー値データベースです。これにより、Apache Camel とともに、Aggregator などのさまざまな Apache Camel 機能の永続的なサポートが提供されます。
非推奨
HawtDB プロジェクトは非推奨となり、軽量で組み込み可能なキー値データベースとして leveldb に置き換えられました。leveldb の使用を容易にするには、leveldbjni プロジェクトがあります。Apache ActiveMQ プロジェクトは、今後、leveldb を主要なファイルベースのメッセージストアとして使用して kahadb を置き換える予定です。
camel-leveldb コンポーネントとして、これの代わりに を使用することが推奨されます。
現在の機能では、以下が提供されます。
- HawtDBAggregationRepository
HawtDBAggregationRepository の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HawtDBAggregationRepository は AggregationRepository で、オンザフライで集約されたメッセージを永続化します。これにより、デフォルトのアグリゲーターはメモリーの AggregationRepository のみを使用するので、メッセージを失わないようにします。
これには、以下のオプションがあります。
| オプション | タイプ | 説明 |
|---|---|---|
repositoryName
|
文字列 |
必須リポジトリー名。複数のリポジトリーに共有 HawtDBFile を使用できます。
|
persistentFileName
|
文字列 | 永続ストレージのファイル名。起動時にファイルが存在しない場合は、新しいファイルが作成されます。 |
bufferSize
|
int | ファイルストアにマップされるメモリーセグメントバッファーのサイズ。デフォルトでは 8mb です。値はバイト単位です。 |
sync
|
boolean |
HawtDBFile が書き込み時に同期されるかどうか。デフォルトは true です。書き込み時に同期することで、すべての書き込みがディスクにスプールされるのを待つため、更新は失われません。このオプションを無効にすると、多くの書き込みがバッチ処理されると HawtDB が自動的に同期されます。
|
pageSize
|
short | メモリーページのサイズ。デフォルトでは 512 バイトになります。値はバイト単位です。 |
hawtDBFile
|
HawtDBFile |
既存の設定された org.apache.camel.component.hawtdb.HawtDBFile インスタンスを使用します。
|
returnOldExchange
|
boolean |
get 操作が存在する場合は、get 操作によって古い既存のエクスチェンジが返されるかどうか。デフォルトでは、集計時に古いエクスチェンジを必要としないため、このオプションは false で最適化されます。
|
useRecovery
|
boolean |
リカバリーが有効になっているかどうか。このオプションは、デフォルトで true です。有効にすると、Apache Camel Aggregator は失敗した集約されたエクスチェンジを自動的にリカバリーし、再送信を行います。
|
recoveryInterval
|
long | recovery が有効になっている場合、バックグラウンドタスクは x 度ごとに実行され、失敗したエクスチェンジをスキャンしてリカバリーし、再送信します。デフォルトでは、この間隔は 5000 ミリ秒です。 |
maximumRedeliveries
|
int |
リカバリーされたエクスチェンジの再配信試行の最大数を制限できます。有効にすると、すべての再配信試行に失敗すると、エクスチェンジはデッドレターチャネルに移動します。デフォルトでは、このオプションは無効です。このオプションを使用する場合は、deadLetterUri オプションも指定する必要があります。
|
deadLetterUri
|
文字列 |
リカバリーされたエクスチェンジが使い切られる Dead Letter Channel のエンドポイント URI。このオプションを使用する場合は、maximumRedeliveries オプションも指定する必要があります。
|
optimisticLocking
|
false
|
Camel 2.12: 複数の Camel アプリケーションが同じ HawtDB ベースの集約リポジトリーを共有するクラスター環境で必要になる、楽観的ロックを有効にします。 |
repositoryName オプションを指定する必要があります。次に、persistentFileName または hawtDBFile のいずれかを指定する必要があります。
永続化時に保持される内容 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HawtDBAggregationRepository は、Serializable と互換性のあるデータタイプのみを保持します。データ型がそのようなタイプの場合はドロップされ、WARN がログに記録されます。また、メッセージ本文とメッセージ ヘッダーのみを保持 し ます。Exchange プロパティーは永続化され ません。
復元 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HawtDBAggregationRepository は、デフォルトで失敗したエクスチェンジ を復元し ます。これは、永続ストアで失敗した エクスチェンジをスキャンするバックグラウンドタスクを持つことで行われます。checkInterval オプションを使用して、このタスクの実行頻度を設定できます。リカバリーはトランザクションとして機能し、Apache Camel が失敗したエクスチェンジのリカバリーと再配信を試み ます。リカバリーされたエクスチェンジは永続ストアから復元され、再送信されて再度送信されます。
エクスチェンジ のリカバリー/再配信時に、以下のヘッダーが設定されます。
| ヘッダー | タイプ | 説明 |
|---|---|---|
Exchange.REDELIVERED
|
ブール値 | エクスチェンジ が再配信されていることを示すために が true に設定されます。 |
Exchange.REDELIVERY_COUNTER
|
整数 | 1 から始まる再配信の試行。 |
エクスチェンジ が正常に処理された場合のみ、完了とマークされます。これは、
AggregationRepository で confirm メソッドが呼び出されたときに発生します。つまり、同じ エクスチェンジ が再び失敗すると、成功するまで再試行されます。
maximumRedeliveries オプションを使用して、特定のリカバリーエクスチェンジの再配信試行の最大数を制限でき ます。また、adLetter Uri オプションも設定する 必要があります。これにより、Apache Camel は maximumRedeliveries に達したときに エクスチェンジ を送信する場所を認識します。
camel-hawtdb のユニットテストには、このテスト などのいくつかの例を確認できます。
Java DSL での HawtDBAggregationRepository の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例では、
target/data/hawtdb.dat ファイルで集約されたメッセージを永続化します。
Spring XML での HawtDBAggregationRepository の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
同じ例になりますが、代わりに Spring XML を使用します。
Dependencies リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel ルートで HawtDB を使用するには、camel-hawtdb の依存関係を追加する必要があります。
maven を使用する場合は、以下を pom.xml に追加し、バージョン番号を最新および最大のリリースに置き換えます( 最新バージョンのダウンロードページを参照してください)。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hawtdb</artifactId> <version>2.3.0</version> </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hawtdb</artifactId>
<version>2.3.0</version>
</dependency>
以下も参照してください。