Red Hat Training
A Red Hat training course is available for Red Hat Fuse
第138章 RSS
RSS コンポーネント
rss: コンポーネントは RSS フィードのポーリングに使用されます。Apache Camel はデフォルトでフィードを 60 秒ごとにポーリングします。
注記: コンポーネントは現在、ポーリング(かかる)フィードのみをサポートします。
注記
Camel on EAP デプロイメント
このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください。
URI 形式
rss:rssUri
rssUri
は、ポーリングする RSS フィードへの URI です。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
オプション
プロパティー | デフォルト | 説明 |
---|---|---|
splitEntries
|
true
|
true の場合、Apache Camel はフィードを個別のエントリーに分割し、ポーリングによって各エントリーを返します。たとえば、フィードに 7 つのエントリーが含まれる場合、Apache Camel は最初のポーリングの最初のエントリー、2 番目のポーリングの 2 番目のエントリーなどを返します。フィードにエントリーが残っていない場合、Apache Camel はリモート RSS URI に接続して新しいフィードを取得します。false の場合、Apache Camel はポーリングごとに新しいフィードを取得し、フィードのエントリーをすべて返します。
|
filter
|
true
|
返されたエントリーをフィルターするために splitEntries オプションと組み合わせて使用します。デフォルトでは、Apache Camel は、フィードから新しいエントリーのみを返す UpdateDateFilter フィルターを適用し、コンシューマーエンドポイントがエントリーを複数回受信しないようにします。フィルターはエントリーを時系列に並べ、最後に返した順に並べ替えます。
|
throttleEntries
|
true
|
camel 2.5: 単一のフィードポーリングで特定されたすべてのエントリーを即座に配信するかどうかを設定します。true の場合、consumer.delay ごとに 1 つのエントリーのみが処理されます。splitEntries が true に設定されている場合にのみ適用されます。 |
lastUpdate
|
null
|
フィルター オプションと組み合わせて を使用して、特定の日付/時間より前のエントリーをブロックします( entry.updated タイムスタンプを使用します)。形式は yyyy-MM-ddTHH:MM:ss です。例: 2007-12-24T17:45:59
|
feedHeader
|
true
|
ROME SyndFeed オブジェクトをヘッダーとして追加するかどうかを指定します。
|
sortEntries
|
false
|
splitEntries が true の場合、エントリーを更新された日付でソートするかどうかを指定します。
|
consumer.delay
|
60000
|
各ポーリングの遅延(ミリ秒単位)。 |
consumer.initialDelay
|
1000
|
ポーリングが開始するまでの時間(ミリ秒単位)。 |
consumer.userFixedDelay
|
false
|
プール間の固定遅延を使用するには、true に設定します。それ以外の場合、固定レートが使用されます。詳細は、JDK の ScheduledExecutorService を参照してください。
|
username
|
Camel 2.16: HTTP フィードからポーリングする場合の基本認証用。 | |
password
|
Camel 2.16: HTTP フィードからポーリングする場合の基本認証用。 |
データ型の交換
Apache Camel は、ROME
SyndFeed
を使用してエクスチェンジの In ボディーを初期化します。splitEntries
フラグの値に応じて、Apache Camel は SyndEntry が 1 つある SyndFeed
または SyndEntry
オブジェクトの java.util.List
のいずれかを返します。
オプション | 値 | 動作 |
---|---|---|
splitEntries
|
true
|
現在のフィードからの 1 つのエントリーがエクスチェンジに設定されます。 |
splitEntries
|
false
|
現在のフィードのエントリー一覧全体がエクスチェンジに設定されます。 |
メッセージヘッダー
ヘッダー | 説明 |
---|---|
CamelRssFeed
|
Apache Camel 2.0: SyndFeed オブジェクト全体。
|
RSS Dataformat
RSS コンポーネントには、String (XML として)と ROME RSS モデルオブジェクト間の変換に使用できる RSS データフォーマットが同梱されています。
- marshal = ROME
SyndFeed
から XMLString
へ - unmarshal = XML
String
から ROMESyndFeed
これを使用するルートは以下のようになります。
from("rss:file:src/test/data/rss20.xml?splitEntries=false&consumer.delay=1000").marshal().rss().to("mock:marshal");
この機能の目的は、RSS メッセージを操作するために Apache Camel の非常に組み込み式を使用できるようにすることです。以下に示すように、XPath 式を使用して RSS メッセージを絞り込むことができます。
// only entries with Camel in the title will get through the filter from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=100") .marshal().rss().filter().xpath("//item/title[contains(.,'Camel')]").to("mock:result");
クエリーパラメーター
RSS フィードの URL がクエリーパラメーターを使用する場合、このコンポーネントはそれも理解します。たとえば、フィードが
alt=rss
を使用する場合など、do ("rss:http://someserver.com/feeds/posts/default?alt=rss&splitEntries=false&consumer.delay=1000").to ("bean:rss"); などに do ("rss:http://someserver.com/feeds/posts/default?alt=rss&splitEntries=false&consumer.delay=1000").to ("bean:rss");
を実行できます。
エントリーのフィルターリング
上記のデータ形式セクションに示されるように、XPath を使用してエントリーを簡単にフィルターできます。Apache Camel の Bean インテグレーションを利用して、独自の条件を実装することもできます。たとえば、上記の XPath の例と同等のフィルターは以下のようになります。
// only entries with Camel in the title will get through the filter from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=100"). filter().method("myFilterBean", "titleContainsCamel").to("mock:result");
これに対するカスタム Bean は以下のようになります。
public static class FilterBean { public boolean titleContainsCamel(@Body SyndFeed feed) { SyndEntry firstEntry = (SyndEntry) feed.getEntries().get(0); return firstEntry.getTitle().contains("Camel"); } }