Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第97章 LevelDB
LevelDB リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
重要
JBoss Fuse 6.3 以降、Camel LevelDB (
camel-leveldb
)コンポーネントは、Red Hat Enterprise Linux 以外のすべてのオペレーティングシステムで 非推奨 になりました。今後、Camel LevelDB コンポーネントは Red Hat Enterprise Linux でのみサポートされます。
Camel 2.10 以降で利用可能
Leveldb は、非常に軽量で組み込み可能なキー値のデータベースです。Camel では、Aggregator などのさまざまな Camel 機能の永続的なサポートを提供します。
現在の機能では、以下が提供されます。
- LevelDBAggregationRepository
LevelDBAggregationRepository の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
LevelDBAggregationRepository
は AggregationRepository
で、オンザフライで集約されたメッセージを永続化します。これにより、デフォルトのアグリゲーターはメモリーの AggregationRepository
のみを使用するので、メッセージを失わないようにします。
これには、以下のオプションがあります。
オプション | タイプ | 説明 |
---|---|---|
repositoryName
|
文字列 |
必須リポジトリー名。複数のリポジトリーに共有 LevelDBFile を使用できます。
|
persistentFileName
|
文字列 | 永続ストレージのファイル名。起動時にファイルが存在しない場合は、新しいファイルが作成されます。 |
levelDBFile
|
LevelDBFile |
既存の設定された org.apache.camel.component.leveldb.LevelDBFile インスタンスを使用します。
|
sync
|
boolean | Camel 2.12: LevelDBFile が書き込み時に同期されるかどうか。デフォルトは false です。書き込み時に同期することで、すべての書き込みがディスクにスプールされるのを待つため、更新は失われません。非同期書き込みと同期 書き込みの詳細は、LevelDB ドキュメント を参照してください。 |
returnOldExchange
|
boolean |
get 操作が存在する場合は、get 操作によって古い既存のエクスチェンジが返されるかどうか。デフォルトでは、集計時に古いエクスチェンジを必要としないため、このオプションは false で最適化されます。
|
useRecovery
|
boolean |
リカバリーが有効になっているかどうか。このオプションは、デフォルトで true です。有効にすると、Camel Aggregator は失敗した集約されたエクスチェンジを自動的にリカバリーし、再送信を行います。
|
recoveryInterval
|
long | recovery が有効になっている場合、バックグラウンドタスクは x 度ごとに実行され、失敗したエクスチェンジをスキャンしてリカバリーし、再送信します。デフォルトでは、この間隔は 5000 ミリ秒です。 |
maximumRedeliveries
|
int |
リカバリーされたエクスチェンジの再配信試行の最大数を制限できます。有効にすると、すべての再配信試行に失敗すると、エクスチェンジはデッドレターチャネルに移動します。デフォルトでは、このオプションは無効です。このオプションを使用する場合は、deadLetterUri オプションも指定する必要があります。
|
deadLetterUri
|
文字列 |
Dead Letter Channel のエンドポイント URI。使い切られるリカバリーされたエクスチェンジが移動されます。このオプションを使用する場合は、maximumRedeliveries オプションも指定する必要があります。
|
repositoryName
オプションを指定する必要があります。次に、persistentFileName
または levelDBFile
のいずれかを指定する必要があります。
永続化時に保持される内容 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
LevelDBAggregationRepository
は、Serializable
と互換性のあるメッセージボディーデータタイプのみを保持します。メッセージヘッダーはプリミティブ、文字列、数字または同様のものである必要があります。データ型がそのようなタイプの場合はドロップされ、WARN
がログに記録されます。また、メッセージ本文とメッセージ
ヘッダーのみを保持 し
ます。Exchange
プロパティーは永続化され ません。
復元 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
LevelDBAggregationRepository
は、デフォルトで失敗したエクスチェンジ を復元し ます。これは、永続ストアで失敗した エクスチェンジをスキャンするバックグラウンドタスクを持つことで行われます。checkInterval
オプションを使用して、このタスクの実行頻度を設定できます。リカバリーはトランザクションとして機能し、Camel が失敗したエクスチェンジのリカバリーおよび再配信を試み ます。リカバリー さ れたエクスチェンジは永続ストアから復元され、再送信されて再度送信されます。
エクスチェンジ のリカバリー/再配信時に、以下のヘッダーが設定されます。
ヘッダー | タイプ | 説明 |
---|---|---|
Exchange.REDELIVERED
|
ブール値 | エクスチェンジ が再配信されていることを示すために が true に設定されます。 |
Exchange.REDELIVERY_COUNTER
|
整数 | 1 から始まる再配信の試行。 |
エクスチェンジ が正常に処理された場合のみ、完了とマークされます。これは、
AggregationRepository
で confirm
メソッドが呼び出されたときに発生します。つまり、同じ エクスチェンジ が再び失敗すると、成功するまで再試行されます。
maximumRedeliveries
オプションを使用して、特定のリカバリーエクスチェンジの再配信試行の最大数を制限でき ます。maximumRedeliveries
に達したときに エクスチェンジ を送信する場所を Camel が認識できるように deadLetterUri
オプションも設定する必要があります。
camel-leveldb のユニットテスト(例: このテスト )にいくつかの例を確認できます。
Java DSL での LevelDBAggregationRepository の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例では、
target/data/leveldb.dat
ファイルで集約されたメッセージを永続化します。
Spring XML での LevelDBAggregationRepository の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
同じ例になりますが、代わりに Spring XML を使用します。
Dependencies リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
camel ルートで LevelDB を使用するには、camel-leveldb の依存関係を追加する必要があります。
maven を使用する場合は、以下を pom.xml に追加し、バージョン番号を最新および最大のリリースに置き換えます( 最新バージョンのダウンロードページを参照してください)。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-leveldb</artifactId> <version>2.17.0.redhat-630xxx</version> </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-leveldb</artifactId>
<version>2.17.0.redhat-630xxx</version>
</dependency>