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