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

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

Java DSL での HawtDBAggregationRepository の使用

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

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

Spring XML での HawtDBAggregationRepository の使用

同じ例になりますが、代わりに Spring XML を使用します。
<!-- a persistent aggregation repository using camel-hawtdb -->
<bean id="repo" class="org.apache.camel.component.hawtdb.HawtDBAggregationRepository">
    <!-- store the repo in the hawtdb.dat file -->
    <property name="persistentFileName" value="target/data/hawtdb.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.hawtdb.HawtDBSpringAggregateTest$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 hawtdb 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

Apache Camel ルートで HawtDB を使用するには、camel-hawtdb の依存関係を追加する必要があります。
maven を使用する場合は、以下を pom.xml に追加し、バージョン番号を最新および最大のリリースに置き換えます( 最新バージョンのダウンロードページを参照してください)。
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-hawtdb</artifactId>
  <version>2.3.0</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