对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
Spring 集成通过Feed适配器提供对联合的支持。 该实现基于 ROME 框架。
您需要将此依赖项包含在您的项目中:
-
Maven
-
Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-feed</artifactId>
<version>6.2.9</version>
</dependency>
compile "org.springframework.integration:spring-integration-feed:6.2.9"
Web 联合是一种发布材料(如新闻报道、新闻稿、博客文章和其他项目)的方法,这些材料通常在网站上提供,但也以 RSS 或 ATOM 等源格式提供。
Spring 集成通过其“feed”适配器提供对 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"
Feed 入站通道适配器
您真正需要为检索源提供支持的唯一适配器是入站通道适配器。 它允许您订阅特定的 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
检索新闻项时,它们将转换为消息并发送到由属性标识的通道。
每条消息的 payload 都是一个实例。
每个 API 都封装了有关新闻项的各种数据(内容、日期、作者和其他详细信息)。channel
com.rometools.rome.feed.synd.SyndEntry
入站源通道适配器是轮询使用者。
这意味着你必须提供一个 poller 配置。
但是,您必须了解的关于源的一件重要事情是,它的内部工作原理与大多数其他轮询消费者略有不同。
当入站源适配器启动时,它会执行第一次轮询并接收一个实例。
该对象包含多个对象。
每个条目都存储在本地条目队列中,并根据属性中的值进行释放,以便每条消息都包含一个条目。
如果在从条目队列中检索条目期间,队列已变为空,则适配器将尝试更新源,从而在队列中填充更多条目(实例)(如果有)。
否则,下一次轮询源的尝试由 Poller 的触发器确定(在前面的配置中每 10 秒)。com.rometools.rome.feed.synd.SyndFeed
SyndEntry
max-messages-per-poll
SyndEntry
重复条目
轮询 Feed 可能会导致条目已被处理(“我已经阅读了该新闻项,为什么还要再次向我显示它?
Spring 集成提供了一种方便的机制,无需担心重复的条目。
每个 Feed 条目都有一个 “published date” 字段。
每次生成和发送新日期时, Spring 集成都会将最新发布日期的值存储在策略的实例中(参见元数据存储)。
这用于保留最新发布日期。Message
MetadataStore
metadataKey
其他选项
从版本 5.0 开始,已删除 deprecated 选项,并提供了 an 的重载构造函数。
当源源不是 HTTP 端点而是任何其他资源(如 FTP 上的 local 或 remote)时,这非常有用。
在逻辑中,这样的资源(或提供的)由 解析到对象以进行前面提到的处理。
您还可以将自定义(例如,使用 option)实例注入到 .com.rometools.fetcher.FeedFetcher
FeedEntryMessageSource
org.springframework.core.io.Resource
FeedEntryMessageSource
URL
SyndFeedInput
SyndFeed
SyndFeedInput
allowDoctypes
FeedEntryMessageSource
如果与 feed 的连接需要一些自定义,例如连接和读取超时,则必须使用扩展及其覆盖,而不是直接注入到 .
例如:
|
如果与 feed 的连接需要一些自定义,例如连接和读取超时,则必须使用扩展及其覆盖,而不是直接注入到 .
例如:
|