我想你应该看看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配置粘贴了这个问题。另外如何实现相同的多个实例。 – Kiba
在答案中添加了一些编辑。 –
请阅读关于'IdempotentReceiverInterceptor'的参考手册。重复逻辑恰好在那里实现。你只需要提供一个适当的密钥来识别唯一性和行为如何处理重复。 –