検索

228.8. tailable カーソルコンシューマーの仕組み

download PDF

カーソルを tailable カーソルに変えるには、最初にカーソルを生成するときに、いくつかの特別なフラグを MongoDB に通知する必要があります。作成されると、カーソルは開いたままになり、新しいデータが到着するまで DBCursor.next() メソッドを呼び出すとブロックされます。ただし、MongoDB サーバーは、不確定な期間が経過しても新しいデータが表示されない場合、カーソルを強制終了する権利を留保します。新しいデータを引き続き使用する場合は、カーソルを再生成する必要があります。そのためには、中断した位置を覚えておく必要があります。そうしないと、もう一度最初から消費し始めます。

Camel MongoDB tailable cursor consumer は、これらすべてのタスクを処理します。タイムスタンプ、シーケンシャル ID など、再生成されるたびにカーソルを配置するマーカーとして機能する、増加する性質のデータ内のフィールドにキーを提供するだけで済みます。MongoDB でサポートされている任意のデータ型にすることができます。日付、文字列、および整数がうまく機能することがわかっています。このコンポーネントのコンテキストでは、このメカニズムをテールトラッキングと呼びます。

consumer はこのフィールドの最後の値を記憶し、カーソルが再生成されるたびに、次のようなフィルターを使用してクエリーを実行します。increasingField > lastValue のようなフィルタでクエリを実行し、未読のデータのみが消費されるようにします。

増加フィールドの設定: エンドポイント URI の tailTrackingIncreasingField オプションで増加フィールドのキーを設定します。Camel 2.10 では、このフィールドのネストされたナビゲーションがまだサポートされていないため、データの最上位フィールドである必要があります。つまり、"timestamp" フィールドは問題ありませんが、"nested.timestamp" は機能しません。ネストされた増加するフィールドのサポートが必要な場合は、Camel JIRA でチケットを開いてください。

カーソル再生成の遅延: 注意すべきことの 1 つは、初期化時に新しいデータがまだ利用できない場合、MongoDB はカーソルを即座に強制終了することです。この場合、サーバーに負荷をかけたくないので、cursorRegenerationDelay オプションが導入されています (デフォルト値は 1000 ミリ秒です)。これは、ニーズに合わせて変更できます。

以下に例を示します。

from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime")
    .id("tailableCursorConsumer1")
    .autoStartup(false)
    .to("mock:test");

上記のルートは、departureTime を増加フィールドとして使用し、デフォルトの再生成カーソル遅延を 1000 ミリ秒にして、flights.cancellations キャップコレクションから消費します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.