【问题标题】:How to remove duplicate messages with multiple rss feed sources in spring integration feed如何在 spring 集成提要中删除具有多个 rss 提要源的重复消息
【发布时间】:2017-01-09 14:52:35
【问题描述】:

如何在 Spring 集成提要中删除具有多个 rss 提要源的重复消息,如 FeedEntryMessageSource 与共享 MetadataStore 所做的那样。

我已经按照https://github.com/okihouse/spring-integration-rss-multiple-urls 的这个例子,对于多个 url,现在我想从每个源中删除重复的消息。我怎样才能做到这一点?

【问题讨论】:

    标签: spring spring-boot rss spring-integration


    【解决方案1】:

    我认为你应该看看Idempotent Receiver 模式。

    在拆分所有List<SyndFeed> 之后,您应该检查您之前是否没有处理过该条目。我的意思是splitter 之后的下一个端点应该标记为IdempotentReceiverInterceptor

    编辑

    @Bean
    @Splitter(inputChannel = "splitterChannel")
    public MessageHandler splitter() {
        DefaultMessageSplitter defaultMessageSplitter = new DefaultMessageSplitter();
        defaultMessageSplitter.setOutputChannelName("serviceChannel");
        return defaultMessageSplitter;
    
    }
    
    @Bean
    public IdempotentReceiverInterceptor idempotentReceiverInterceptor() {
       return new IdempotentReceiverInterceptor(new MetadataStoreSelector(...));
    }
    
    
    @ServiceActivator(inputChannel = "serviceChannel")
    @IdempotentReceiver("idempotentReceiverInterceptor")
    public void processFeed(SyndFeed feed) {
        ...
    }
    

    【讨论】:

    • @Artem_Bilan 感谢您的快速回复。您能否发布一个与您提到的相同的示例,对于我在问题中粘贴的示例,使用 java config。还有如何为多个实例实现相同的。
    • 在答案中添加了一些编辑。
    • 请阅读关于IdempotentReceiverInterceptor 的参考手册。复制逻辑正是在那里实现的。您只需要提供一个正确的密钥来识别唯一性以及如何处理重复项。
    • @Artem_Bilan 很抱歉打扰您,但请您帮我实现多个 url 的元数据存储,为不同的源持久保存 lastpubdate,然后在 IdempotentReceiverInterceptor 中使用该元数据存储来过滤每个源的消息.
    • 不,您必须为 FeedMessageSoure 和幂等接收器使用不同的 MetadataStores。不同的逻辑不同的商店。是的,这可以是相同的实例,顺便说一句,但是使用不同的关键逻辑,无论如何您都会达到所需的行为。不:我不会为你写代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多