フィードアダプター
Spring Integration は、フィードアダプターを介したシンジケーションのサポートを提供します。実装は ROME フレームワーク (英語) に基づいています。
この依存関係をプロジェクトに含める必要があります。
Web シンジケーションは、ニュース記事、プレスリリース、ブログ投稿、その他の Web サイトで一般的に利用可能な資料を公開する方法ですが、RSS や ATOM などのフィード形式でも利用できます。
Spring 統合は、その「フィード」アダプターを介して Web シンジケーションをサポートし、便利な名前空間ベースの構成を提供します。'feed' 名前空間を構成するには、XML 構成ファイルのヘッダー内に次の要素を含めます。
xmlns:int-feed="http://www.springframework.org/schema/integration/feed"
xsi:schemaLocation="http://www.springframework.org/schema/integration/feed
https://www.springframework.org/schema/integration/feed/spring-integration-feed.xsd"
フィード受信チャネルアダプター
フィードの取得をサポートするために本当に必要な唯一のアダプターは、受信チャネルアダプターです。特定の URL にサブスクライブできます。次の例は、可能な構成を示しています。
Java DSL
Java
XML
@Configuration
@EnableIntegration
public class ContextConfiguration {
@Value("org/springframework/integration/feed/sample.rss")
private Resource feedResource;
@Bean
public IntegrationFlow feedFlow() {
return IntegrationFlow
.from(Feed.inboundAdapter(this.feedResource, "feedTest")
.preserveWireFeed(true),
e -> e.poller(p -> p.fixedDelay(100)))
.channel(c -> c.queue("entries"))
.get();
}
}
@Bean
@InboundChannelAdapter(inputChannel = "fromFeed")
public FeedEntryMessageSource feedEntrySource() {
return new FeedEntryMessageSource("https://feeds.bbci.co.uk/news/rss.xml", "metadataKey");
}
<int-feed:inbound-channel-adapter id="feedAdapter"
channel="feedChannel"
url="https://feeds.bbci.co.uk/news/rss.xml">
<int:poller fixed-rate="10000" max-messages-per-poll="100" />
</int-feed:inbound-channel-adapter>
上記の構成では、url
属性によって識別される URL にサブスクライブしています。
ニュース項目が取得されると、それらはメッセージに変換され、channel
属性によって識別されるチャネルに送信されます。各メッセージのペイロードは com.rometools.rome.feed.synd.SyndEntry
インスタンスです。それぞれがニュースアイテムに関するさまざまなデータ(コンテンツ、日付、作成者、その他の詳細)をカプセル化します。
受信 フィードチャネルアダプターは、ポーリングコンシューマーです。つまり、ポーラー構成を提供する必要があります。ただし、フィードに関して理解しなければならない重要な点の 1 つは、フィードの内部動作が他のほとんどのポーリングコンシューマーとは少し異なるということです。受信 フィードアダプターが開始されると、最初のポーリングが実行され、com.rometools.rome.feed.synd.SyndFeed
インスタンスが受信されます。そのオブジェクトには、複数の SyndEntry
オブジェクトが含まれています。各エントリはローカルエントリキューに格納され、各メッセージに 1 つのエントリが含まれるように、max-messages-per-poll
属性の値に基づいて解放されます。エントリキューからのエントリの取得中にキューが空になった場合、アダプターはフィードを更新しようとします。これにより、利用可能なエントリ (SyndEntry
インスタンス) がキューに追加されます。それ以外の場合、フィードのポーリングの次の試行は、ポーラーのトリガーによって決定されます (上記の構成では 10 秒ごと)。
重複エントリ
フィードをポーリングすると、すでに処理されたエントリが返される場合があります (「そのニュース項目はすでに読みましたが、なぜもう一度表示するのですか ? 」)。Spring Integration は、エントリの重複を心配する必要をなくすための便利なメカニズムを提供します。各フィードエントリには「公開日」フィールドがあります。新しい Message
が生成されて送信されるたびに、Spring Integration は最新の発行日の値を MetadataStore
戦略のインスタンスに格納します ( メタデータストアを参照)。metadataKey
は、最新の発行日を保持するために使用されます。
その他のオプション
バージョン 5.0 から、非推奨の com.rometools.fetcher.FeedFetcher
オプションが削除され、org.springframework.core.io.Resource
のオーバーロードされた FeedEntryMessageSource
コンストラクターが提供されます。これは、フィードソースが HTTP エンドポイントではなく、他のリソース(FTP 上のローカルまたはリモートなど)である場合に役立ちます。FeedEntryMessageSource
ロジックでは、そのようなリソース(または提供された URL
)は、前述の処理のために SyndFeedInput
によって SyndFeed
オブジェクトに解析されます。また、カスタマイズされた SyndFeedInput
(たとえば、allowDoctypes
オプションを使用)インスタンスを FeedEntryMessageSource
に挿入することもできます。
フィードへの接続にカスタマイズが必要な場合。接続と読み取りのタイムアウトでは、
|