gpt4 book ai didi

rss - Spring 集成 : how to read multiple RSS channels?

转载 作者:行者123 更新时间:2023-12-04 18:02:07 25 4
gpt4 key购买 nike

我编写了读取 RSS 提要的应用程序。它与我在 beans.xml 中的一个 channel 配合使用非常有效,如下所示:

<feed:inbound-channel-adapter id="news"
channel="inputRssFeedChannel"
url="http://feeds.feedburner.com/Techcrunch">
<int:poller fixed-rate="5000" max-messages-per-poll="100"/>
</feed:inbound-channel-adapter>

<int:service-activator input-channel="inputRssFeedChannel"
ref="rssPrintOutService"
method="printRss"
output-channel="nullChannel"/>

每次它只调用处理 SyndEntry 的 RssHandler。但是,如果我想阅读几个 rss url(2、5、20 等...),我该怎么办?

最佳答案

创建您自己的 org.springframework.integration.core.MessageSource 实现并在输入 channel 引用中使用它,如下所示:

<int:inbound-channel-adapter id="newsInput" ref="newsReader">
<int:poller fixed-rate="1" time-unit="SECONDS" max-messages-per-poll="1"/>
</int:inbound-channel-adapter>

<bean id="newsReader" class="blog.NewsReader">
<property name="fetcherListener">
<bean class="blog.helper.FetcherEventListenerImpl"/>
</property>
<property name="urls">
<list>
<value>http://www.gridshore.nl/feed/</value>
<value>https://spring.io/blog.atom</value>
<value>http://feeds.foxnews.com/foxnews/video?format=xml</value>
</list>
</property>
</bean>

NewsReader 类使用 urls propriety 中提到的列表并检索 feed。请引用下面的接收方法。

public class NewsReader implements MessageSource, InitializingBean {
private static Logger logger = LoggerFactory.getLogger(NewsReader.class);
private FeedFetcherCache feedInfoCache;
private FeedFetcher feedFetcher;
private FetcherListener fetcherListener;
private List<String> urls;

@Override
public Message receive() {
List<SyndFeed> feeds = obtainFeedItems();
return MessageBuilder.withPayload(feeds)
.setHeader("feedid", "newsfeed").build();
}

private List<SyndFeed> obtainFeedItems() {
List<SyndFeed> feed = new ArrayList<>();
try {
for (String url : urls) {
feed.add(feedFetcher.retrieveFeed(new URL(url)));
}
} catch (IOException e) {
logger.error("IO Problem while retrieving feed", e);
} catch (FeedException e) {
logger.error("Feed Problem while retrieving feed", e);
} catch (FetcherException e) {
logger.error("Fetcher Problem while retrieving feed", e);
}
return feed;
}

@Override
public void afterPropertiesSet() throws Exception {
feedInfoCache = HashMapFeedInfoCache.getInstance();
feedFetcher = new HttpURLFeedFetcher(feedInfoCache);
if (fetcherListener != null) {
feedFetcher.addFetcherEventListener(fetcherListener);
}
}

public void setFetcherListener(FetcherListener fetcherListener) {
this.fetcherListener = fetcherListener;
}

public void setUrls(List<String> urls) {
this.urls = urls;
}

如果您想查看我的完整代码:

git 克隆 https://github.com/BikashShaw/MultipleRSSFeedRead.git

关于rss - Spring 集成 : how to read multiple RSS channels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com