第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>
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel バージョン 2.19 以降:
mongodb-gridfs:connectionBean?database=databaseName&bucket=bucketName[&moreOptions...]
Camel バージョン 2.17 および 2.18。
gridfs:connectionBean?database=databaseName&bucket=bucketName[&moreOptions...]
エンドポイントオプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
gridfs エンドポイントは、プロデューサーとして動作するか、コンシューマーとして動作するかによって、以下のオプションをサポートします。(コンシューマーの場合、オプションはコンシューマーのタイプによっても異なります。)
| 名前 | デフォルト値 | 説明 | プロデューサー | コンシューマー |
|---|---|---|---|---|
database
|
none | 必須。このエンドポイントをバインドするデータベースの名前を指定します。すべての操作は、このデータベースに対して実行されます。 | Y | Y |
bucket
|
fs
|
指定されたデータベース内の GridFS バケットの名前を指定します。デフォルトは GridFS.DEFAULT_BUCKET の値です。
|
Y | Y |
operation
|
create
|
このエンドポイントが実行する操作の ID を指定します。有効な値は以下のとおりです。
|
Y | N |
query
|
none |
queryStrategy オプションと併用して、新規ファイルの検索に使用されるクエリーを作成します。
|
N | Y |
queryStrategy
|
TimeStamp
|
新規ファイルの検索に使用されるストラテジーを指定します。有効な値は以下のとおりです。
|
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>
サンプルルート リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Spring XML で定義された以下のルートは、コレクションで操作
findOne を実行します。
<route>
<from uri="direct:start" />
<!-- using bean 'mongoBean' defined above -->
<to uri="mongodb-gridfs:mongoBean?database=${mongodb.database}&operation=findOne" />
<to uri="direct:result" />
</route>
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);filename ヘッダーを使用して、指定したファイル名に一致するファイルの数を指定できます。Map<String, Object> headers = new HashMap<String, Object>(); headers.put(Exchange.FILE_NAME, "filename.txt"); Integer count = template.requestBodyAndHeaders("direct:count", query, headers);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 2897651254findOne受信ヘッダーから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);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);removeGridFS データベースからファイルを削除します。// 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);
GridFS Consumer リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
MongoDB GridFS コンポーネントは、新しいファイルを処理するために GridFS を定期的にポーリングします。
delay と initialDelay の 2 つのパラメーターがこの動作を制御します。delay は、バックグラウンドスレッドがポーリングの試行間でスリープする時間を指定します(デフォルトは 500ミリ秒)。initialDelay は、最初に GridFS をポーリングするまでコンシューマーの起動を待機する時間を指定します。これは、バックエンドサービスが利用可能になるのにもう少し時間が必要な場合に役立ちます。
グリッド内のどのファイルがまだ処理されていないかを判断するために、コンシューマーがいくつかの戦略を使用できます。
TimeStamp-[default] 起動時に、コンシューマーは現在の時刻を開始点として使用します。コンシューマーの起動後に追加されたファイルのみが処理されます。コンシューマー起動前で、グリッド内のすべてのファイルは無視されます。ポーリング後、コンシューマーは最後に処理されたファイルのタイムスタンプでタイムスタンプを更新します。PersistentTimestamp-on は起動時に、persistentTSObjectによって提供されるオブジェクトのpersistentTSCollectionで指定されたコレクションをクエリーし、これを開始タイムスタンプとして使用します。そのオブジェクトが存在しない場合、コンシューマーは現在の時間を使用してオブジェクトを作成します。ファイルが処理されるたびに、コレクションのタイムスタンプが更新されます。FileAttribute- タイムスタンプを使用する代わりに、コンシューマーはfileAttributeNameで指定された属性がないファイルについて GridFS にクエリーを実行します。コンシューマーがファイルの処理を開始すると、この属性は GridFS のファイルに追加されます。使用例:from("mongodb-gridfs?database=tickets&queryStrategy=FileAttribute").process(...);TimestampAndFileAttribute- 2 つのストラテジーを分解すると、コンシューマーは、fileAttributeNameで指定された属性がないTimeStampより新しいファイルを検索します。ファイルの処理中に、不足している属性が GridFS のファイルに追加されます。PersistentTimestampAndFileAttribute- 2 つのストラテジーを分解すると、コンシューマーは、fileAttributeNameで指定された属性がないTimeStampより新しいファイルを検索します。ファイルの処理中に、不足している属性が GridFS のファイルに追加され、コレクションのタイムスタンプが更新されます。使用例:from("mongodb-gridfs?database=myData&queryStrategy=PersistentTimestamp& persistentTSCollection=CamelTimestamps&persistentTSObject=myDataTS).process(...);
その他の参考資料 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!