首页 文章

Spring Integration自定义Feed入站通道适配器

提问于
浏览
1

我正在使用Spring Integration和Feed入站通道适配器来处理新闻RSS提要(我认为这很棒:) . 我还想将一些API提供的其他新闻源用于同一个 Channels . API只是一个HTTP endpoints ,它返回JSON中的新闻文章列表 . 这些字段与RSS非常相似,即有一个 Headers ,描述,发布日期可以映射到SyndEntry对象 .

理想情况下,我想使用Feed入站通道适配器中可用的相同功能来处理重复的条目等 . 是否可以自定义Feed入站通道适配器来处理和映射JSON?

任何示例代码或指针都非常有用 .

1 回答

  • 0

    好吧,不 . FeedEntryMessageSource 完全基于Rome Tools,它仅处理XML模型 .

    我担心你必须创建自己的组件,它将为那些JSON记录生成 SyndEntry 实例 . 这可能真的像 HttpRequestExecutingMessageHandler ,基于 RestTemplateMappingJackson2HttpMessageConverter 无论如何都是默认存在的 .

    您可以尝试将 HttpRequestExecutingMessageHandler 配置为 setExpectedResponseType(SyndFeedImpl.class) ,并期望在响应中具有 application/json content-type .

    要实现"deals with duplicate entries",您可以考虑使用Idempotent Receiver模式 . MessageSelector 应该基于 MetadaStore 并且真正预先形成类似于 FeedEntryMessageSource 中的逻辑:

    if (lastModifiedDate != null) {
            this.lastTime = lastModifiedDate.getTime();
        }
        else {
            this.lastTime += 1; //NOSONAR - single poller thread
        }
        this.metadataStore.put(this.metadataKey, this.lastTime + "");
    
        ...
    
        if ((entryDate != null && entryDate.getTime() > this.lastTime)
    

    其中 entrypayloadFeedEntry )的 splitted 结果来自 HttpRequestExecutingMessageHandler .

相关问题