218.7. 調整可能なカーソルコンシューマーの仕組み
カーソルをテール可能なカーソルに変換するには、最初にカーソルを生成する際に、いくつかの特別なフラグが MongoDB に通知されます。作成後、カーソルは開いたままとなり、新規データが到達するまで MongoCursor.next()
メソッドの呼び出し時にブロックされます。ただし、MongoDB サーバーは、不確定な期間後に新規データが表示されない場合は、カーソルを終了する権利を確保します。新しいデータの消費を継続するには、カーソルを再生成する必要があります。この作業を行うには、停止した位置を覚えておく必要があります。そうでないと、最初からやり直す必要があります。
Camel MongoDB の調整可能なカーソルコンシューマーは、これらのすべてのタスクを処理します。性質を増加させるデータ内の一部のフィールドにキーを提供する必要があります。これは、再生成するたびにカーソルを置くマーカーとして機能します。たとえば、タイムスタンプ、連続 ID など。MongoDB でサポートされるデータタイプ。正常に機能するために日付、文字列、および整数が見つかります。このメカニズムをこのコンポーネントのコンテキストで呼び出します。
コンシューマーはこのフィールドの最後の値を記憶し、カーソルを再生成するたびに、reads Field > lastValue のようにフィルターを指定してクエリーを実行し、未読のデータのみが消費される
ようにします。
増加フィールドの設定: エンドポイント URI tailTrackingIncreasingField
オプションでの増加フィールドのキーを設定します。Camel 2.10 では、このフィールドのネストされたナビゲーションはまだサポートされていないため、データのトップレベルのフィールドでなければなりません。つまり、「timestamp」フィールドは okay ですが、「nested.timestamp」は機能しません。入れ子になった増加フィールドのサポートが必要な場合は、Camel JIRA でチケットを作成してください。
カーソルの再生成遅延: 新規データが初期時に利用できない場合、MongoDB はカーソルを即時に強制終了することです。この場合、サーバーに負荷がかからないため、(デフォルト値 1000ms) cursorRegenerationDelay
オプションが導入されました。これは、ニーズに合わせて変更できます。
以下に例を示します。
from("mongodb3:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime") .id("tailableCursorConsumer1") .autoStartup(false) .to("mock:test");
上記のルートは、「flights.cancellations」の上限付きのコレクションから消費されます。「departureTime」を増加フィールドとして使用し、デフォルトの再生成カーソル遅延は 1000ms です。