第109章 MongoDB GridFS


Camel MongoDB GridFS コンポーネント

Camel 2.17 以降で利用可能
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-mongodb-gridfs</artifactId>
    <version>2.17.0.redhat-630xxx</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

Camel バージョン 2.19 以降:
mongodb-gridfs:connectionBean?database=databaseName&bucket=bucketName[&moreOptions...]
Copy to Clipboard Toggle word wrap
Camel バージョン 2.17 および 2.18。
gridfs:connectionBean?database=databaseName&bucket=bucketName[&moreOptions...]
Copy to Clipboard Toggle word wrap

エンドポイントオプション

gridfs エンドポイントは、プロデューサーとして動作するか、コンシューマーとして動作するかによって、以下のオプションをサポートします。(コンシューマーの場合、オプションはコンシューマーのタイプによっても異なります。)
Expand
名前 デフォルト値 説明 プロデューサー コンシューマー
database none 必須。このエンドポイントをバインドするデータベースの名前を指定します。すべての操作は、このデータベースに対して実行されます。 Y Y
bucket fs 指定されたデータベース内の GridFS バケットの名前を指定します。デフォルトは GridFS.DEFAULT_BUCKET の値です。 Y Y
operation create
このエンドポイントが実行する操作の ID を指定します。有効な値は以下のとおりです。
  • query operations: findOne, listAll, count
  • 書き込み操作: create
  • delete operation: remove
Y N
query none queryStrategy オプションと併用して、新規ファイルの検索に使用されるクエリーを作成します。 N Y
queryStrategy TimeStamp
新規ファイルの検索に使用されるストラテジーを指定します。有効な値は以下のとおりです。
  • TimeStamp
    コンシューマーの起動後にアップロードされるファイルを処理します。
  • PersistentTimestamp
    TimeStamp と同様に、コレクションに使用された最後のタイムスタンプを保持するため、再起動時にコンシューマーは停止した場所を再開できます。
  • FileAttribute
    fileAtttributeName で指定された属性がないファイルを見つけます( fileAttributeNameを参照してください)。処理後、fileAttributeName で指定された属性がファイルに追加されます。
  • TimestampAndFileAttribute
    TimeStamp より新しいファイルを見つけ、fileAtttributeName で指定された属性がありません。
  • PersistentTimestampAndFileAttribute
N Y
persistentTSCollection camel-timestamps PersistentTimestamp と併用されます。タイムスタンプが保存されるコレクションを指定します。 N Y
persistentTSObject camel-timestamp
PersistentTimestamp と併用されます。タイムスタンプオブジェクトの ID を指定します。
これにより、各コンシューマーは共通のコレクションに独自のタイムスタンプ ID を保存できます。
N Y
fileAttributeName camel-processed
FileAttribute と併用されます。使用する属性の名前を指定します。
ファイルが処理されると、指定した属性は の 処理 に設定されます。ファイル処理が完了すると、指定された属性は done に設定されます。
N Y
delay 500 (ms) 新規ファイルの GridFS の後続のポーリングの間隔をミリ秒単位で指定します。 N Y
initialDelay
1000 (ms)
新しいファイルを初めてポーリングするまでの遅延をミリ秒単位で指定します。
N Y

Spring XML でのデータベースの設定

以下の Spring XML は、MongoDB インスタンスへのコネクションを定義する Bean を作成します。
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="mongoBean" class="com.mongodb.Mongo">
        <constructor-arg name="host" value="${mongodb.host}" />
        <constructor-arg name="port" value="${mongodb.port}" />
    </bean>
</beans>
Copy to Clipboard Toggle word wrap

サンプルルート

Spring XML で定義された以下のルートは、コレクションで操作 findOne を実行します。
<route>
  <from uri="direct:start" />
  <!-- using bean 'mongoBean' defined above -->
  <to uri="mongodb-gridfs:mongoBean?database=${mongodb.database}&amp;operation=findOne" />
  <to uri="direct:result" />
</route>
Copy to Clipboard Toggle word wrap

MongoDB 操作 - プロデューサーエンドポイント

  • カウント
    コレクション内のファイルの合計数を返し、OUT メッセージのボディーとして整数を返します。
    // from("direct:count").to("mongodb-gridfs?database=tickets&operation=count");
    Integer result = template.requestBodyAndHeader("direct:count", "irrelevantBody");
    assertTrue("Result is not of type Long", result instanceof Integer);
    Copy to Clipboard Toggle word wrap
    filename ヘッダーを使用して、指定したファイル名に一致するファイルの数を指定できます。
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put(Exchange.FILE_NAME, "filename.txt");
    Integer count = template.requestBodyAndHeaders("direct:count", query, headers);
    Copy to Clipboard Toggle word wrap
  • listAll
    タブで区切られたストリームに、ファイル名とその ID を一覧表示する Reader を返します。
    // from("direct:listAll").to("mongodb-gridfs?database=tickets&operation=listAll");
    Reader result = template.requestBodyAndHeader("direct:listAll", irrelevantBody");
                    
    filename1.txt     1252314321
    filename2.txt     2897651254
    Copy to Clipboard Toggle word wrap
  • findOne
    受信ヘッダーから Exchange.FILE_NAME を使用して、GridFS システムで一致するファイルを見つけ、ボディーをコンテンツの InputStream に設定し、メタデータをヘッダーとして提供します。
    // from("direct:findOne").to("mongodb-gridfs?database=tickets&operation=findOne");
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put(Exchange.FILE_NAME, "filename.txt");
    InputStream result = template.requestBodyAndHeaders("direct:findOne", "irrelevantBody", headers);
    Copy to Clipboard Toggle word wrap
  • create
    ファイルコンテンツの受信ヘッダーとボディーコンテンツの受信ヘッダー Exchange.FILE_NAME を使用して、GridFS データベースに新しいファイルを作成します。InputStream
    // from("direct:create").to("mongodb-gridfs?database=tickets&operation=create");
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put(Exchange.FILE_NAME, "filename.txt");
    InputStream result = ...the data for the file...
    template.requestBodyAndHeaders("direct:create", stream, headers);
    
    Copy to Clipboard Toggle word wrap
  • remove
    GridFS データベースからファイルを削除します。
    // from("direct:remove").to("mongodb-gridfs?database=tickets&operation=remove");
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put(Exchange.FILE_NAME, "filename.txt");           
    template.requestBodyAndHeaders("direct:remove", "", headers);
    
    Copy to Clipboard Toggle word wrap

GridFS Consumer

MongoDB GridFS コンポーネントは、新しいファイルを処理するために GridFS を定期的にポーリングします。delayinitialDelay の 2 つのパラメーターがこの動作を制御します。delay は、バックグラウンドスレッドがポーリングの試行間でスリープする時間を指定します(デフォルトは 500ミリ秒)。initialDelay は、最初に GridFS をポーリングするまでコンシューマーの起動を待機する時間を指定します。これは、バックエンドサービスが利用可能になるのにもう少し時間が必要な場合に役立ちます。
グリッド内のどのファイルがまだ処理されていないかを判断するために、コンシューマーがいくつかの戦略を使用できます。
  • TimeStamp-[default] 起動時に、コンシューマーは現在の時刻を開始点として使用します。コンシューマーの起動後に追加されたファイルのみが処理されます。コンシューマー起動前で、グリッド内のすべてのファイルは無視されます。ポーリング後、コンシューマーは最後に処理されたファイルのタイムスタンプでタイムスタンプを更新します。
  • PersistentTimestamp-on は起動時に、persistentTSObject によって提供されるオブジェクトの persistentTSCollection で指定されたコレクションをクエリーし、これを開始タイムスタンプとして使用します。そのオブジェクトが存在しない場合、コンシューマーは現在の時間を使用してオブジェクトを作成します。ファイルが処理されるたびに、コレクションのタイムスタンプが更新されます。
  • FileAttribute- タイムスタンプを使用する代わりに、コンシューマーは fileAttributeName で指定された属性がないファイルについて GridFS にクエリーを実行します。コンシューマーがファイルの処理を開始すると、この属性は GridFS のファイルに追加されます。
    使用例:
    from("mongodb-gridfs?database=tickets&queryStrategy=FileAttribute").process(...);
    Copy to Clipboard Toggle word wrap
  • TimestampAndFileAttribute- 2 つのストラテジーを分解すると、コンシューマーは、fileAttributeName で指定された属性がない TimeStamp より新しいファイルを検索します。ファイルの処理中に、不足している属性が GridFS のファイルに追加されます。
  • PersistentTimestampAndFileAttribute- 2 つのストラテジーを分解すると、コンシューマーは、fileAttributeName で指定された属性がない TimeStamp より新しいファイルを検索します。ファイルの処理中に、不足している属性が GridFS のファイルに追加され、コレクションのタイムスタンプが更新されます。
    使用例:
    from("mongodb-gridfs?database=myData&queryStrategy=PersistentTimestamp&
          persistentTSCollection=CamelTimestamps&persistentTSObject=myDataTS).process(...);
    Copy to Clipboard Toggle word wrap

その他の参考資料

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat