第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 の使用

LevelDBAggregationRepositoryAggregationRepository で、オンザフライで集約されたメッセージを永続化します。これにより、デフォルトのアグリゲーターはメモリーの AggregationRepository のみを使用するので、メッセージを失わないようにします。
これには、以下のオプションがあります。
Expand
オプション タイプ 説明
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 が失敗したエクスチェンジのリカバリーおよび再配信を試み ます。リカバリー れたエクスチェンジは永続ストアから復元され、再送信されて再度送信されます。
エクスチェンジ のリカバリー/再配信時に、以下のヘッダーが設定されます。
Expand
ヘッダー タイプ 説明
Exchange.REDELIVERED ブール値 エクスチェンジ が再配信されていることを示すために が true に設定されます。
Exchange.REDELIVERY_COUNTER 整数 1 から始まる再配信の試行。
エクスチェンジ が正常に処理された場合のみ、完了とマークされます。これは、AggregationRepositoryconfirm メソッドが呼び出されたときに発生します。つまり、同じ エクスチェンジ が再び失敗すると、成功するまで再試行されます。
maximumRedeliveries オプションを使用して、特定のリカバリーエクスチェンジの再配信試行の最大数を制限でき ますmaximumRedeliveries に達したときに エクスチェンジ を送信する場所を Camel が認識できるように deadLetterUri オプションも設定する必要があります。
camel-leveldb のユニットテスト(例: このテスト )にいくつかの例を確認できます。

Java DSL での LevelDBAggregationRepository の使用

この例では、target/data/leveldb.dat ファイルで集約されたメッセージを永続化します。
public void configure() throws Exception {
    // create the leveldb repo
    LevelDBAggregationRepository repo = new LevelDBAggregationRepository("repo1", "target/data/leveldb.dat");

    // here is the Camel route where we aggregate
    from("direct:start")
        .aggregate(header("id"), new MyAggregationStrategy())
            // use our created leveldb repo as aggregation repository
            .completionSize(5).aggregationRepository(repo)
            .to("mock:aggregated");
}
Copy to Clipboard Toggle word wrap

Spring XML での LevelDBAggregationRepository の使用

同じ例になりますが、代わりに Spring XML を使用します。
<!-- a persistent aggregation repository using camel-leveldb -->
<bean id="repo" class="org.apache.camel.component.leveldb.LevelDBAggregationRepository">
    <!-- store the repo in the leveldb.dat file -->
    <property name="persistentFileName" value="target/data/leveldb.dat"/>
    <!-- and use repo2 as the repository name -->
    <property name="repositoryName" value="repo2"/>
</bean>

<!-- aggregate the messages using this strategy -->
<bean id="myAggregatorStrategy" class="org.apache.camel.component.leveldb.LevelDBSpringAggregateTest$MyAggregationStrategy"/>

<!-- this is the camel routes -->
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

    <route>
        <from uri="direct:start"/>
        <!-- aggregate using our strategy and leveldb repo, and complete when we have 5 messages aggregated -->
        <aggregate strategyRef="myAggregatorStrategy" aggregationRepositoryRef="repo" completionSize="5">
            <!-- correlate by header with the key id -->
            <correlationExpression><header>id</header></correlationExpression>
            <!-- send aggregated messages to the mock endpoint -->
            <to uri="mock:aggregated"/>
        </aggregate>
    </route>

</camelContext>
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat