2017-01-09 103 views

回答

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) { 
    ... 
} 
+0

@Artem_Bilan感谢您的快速答复。你可以请你发布一个与你提到的相同的例子,例如我使用java配置粘贴了这个问题。另外如何实现相同的多个实例。 – Kiba

+0

在答案中添加了一些编辑。 –

+0

请阅读关于'IdempotentReceiverInterceptor'的参考手册。重复逻辑恰好在那里实现。你只需要提供一个适当的密钥来识别唯一性和行为如何处理重复。 –