Red Hat Training

A Red Hat training course is available for Red Hat Fuse

第138章 RSS

RSS コンポーネント

rss: コンポーネントは RSS フィードのポーリングに使用されます。Apache Camel はデフォルトでフィードを 60 秒ごとにポーリングします。
注記: コンポーネントは現在、ポーリング(かかる)フィードのみをサポートします。
注記
camel-rss は内部的に、ServiceMix でホストされるパッチが 適用されたバージョンROME を使用して、OSGi クラ出力ディングの問題 を解決します。

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 splitEntriestrue の場合、エントリーを更新された日付でソートするかどうかを指定します。
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 から XML String
  • unmarshal = XML String から ROME SyndFeed
これを使用するルートは以下のようになります。
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");
    }
}

その他の参考資料