Spring integration Spring云数据流http轮询和重复数据消除

Spring integration Spring云数据流http轮询和重复数据消除,spring-integration,spring-batch,spring-cloud-stream,spring-cloud-dataflow,spring-cloud-task,Spring Integration,Spring Batch,Spring Cloud Stream,Spring Cloud Dataflow,Spring Cloud Task,我一直在阅读大量SpringCloudDataflow和相关文档,以便生成一个将在我的组织的CloudFoundry部署中运行的数据摄取解决方案。目标是轮询HTTP服务以获取数据,为了便于讨论,可能每天轮询三次,并在PostgreSQL数据库中插入/更新该数据。HTTP服务似乎每天提供10到数千条记录 到目前为止,混淆的一点是数据流管道环境中用于重复数据消除轮询记录的最佳实践。源数据没有时间戳字段来帮助跟踪轮询,只有粗略的日期字段。我也不能保证记录不会追溯更新。这些记录似乎有一个唯一的ID,因此

我一直在阅读大量SpringCloudDataflow和相关文档,以便生成一个将在我的组织的CloudFoundry部署中运行的数据摄取解决方案。目标是轮询HTTP服务以获取数据,为了便于讨论,可能每天轮询三次,并在PostgreSQL数据库中插入/更新该数据。HTTP服务似乎每天提供10到数千条记录

到目前为止,混淆的一点是数据流管道环境中用于重复数据消除轮询记录的最佳实践。源数据没有时间戳字段来帮助跟踪轮询,只有粗略的日期字段。我也不能保证记录不会追溯更新。这些记录似乎有一个唯一的ID,因此我可以通过这种方式消除记录的重复,但根据文档,我不确定如何最好地在数据流中实现该逻辑。据我所知,政府并没有提供这种开箱即用的服务。我读过关于Spring集成的文章,但我也不确定这是否是为了解决我的担忧

我的直觉是在数据流中创建一个定制的处理器Java组件,该组件执行数据库查询,以确定是否已插入轮询记录,然后将适当的记录插入目标数据库,或者沿流传递它们。在流应用程序中,在中间步骤中查询目标数据库是否可以接受?或者,我可以在一个Spring云任务中实现这一切,作为一个批处理操作,该批处理操作根据某个时间表触发

关于数据流应用程序,最好的方法是什么?在数据流/流/任务/集成应用程序中实现重复数据消除的常见/最佳做法是什么?我应该复制初学者应用程序的设置还是从头开始,因为我相当确定我需要编写自定义代码?我是否需要SpringCloudDataflow,因为我根本不确定是否会使用它的DSL?对于所有这些问题,我深表歉意,但作为CloudFoundry和所有这些Spring项目的新手,将其拼凑在一起是令人畏惧的


提前感谢您的帮助。

鉴于您的需求,您很可能需要创建一个自定义处理器。您需要跟踪插入的内容,以避免重复

并没有什么可以阻止您在流应用程序中编写这样的处理器,但性能可能会受到影响,因为对于每个记录,您都会发出一个DB查询

如果顺序不重要,您可以并行化查询,以便处理多条并发消息,但最终您的数据库仍将为此付出代价

另一种方法是使用一种可以大大加快检查插入记录速度的方法

你可以从克隆starter应用程序开始,你可以让一个轮询器触发一个http客户端处理器,它获取你的数据,然后经过你的自定义代码处理器,最后到达一个jdbc接收器。类似于
streamcreatetime--triger.cron=| httpclient--httpclient.url表达式=| customProcessor | jdbc


使用SCDF的优点之一是,您可以通过部署属性(如
deployer.customProcessor.count=8)独立扩展自定义处理器,Spring Cloud Data Flow基于Spring Cloud Stream为数据构建集成流,而Spring Cloud Stream又完全基于Spring集成。Spring集成中的所有原则都可以在SCDF级别的任何地方应用

这真的可能是一种情况,你将无法避免一些编码,但你需要的是所谓的EIP。并为我们提供了一个:

    @ServiceActivator(inputChannel = "processChannel")
    @IdempotentReceiver("idempotentReceiverInterceptor")
    public void handle(Message<?> message)
@ServiceActivator(inputChannel=“processChannel”)
@幂等接收器(“幂等接收器侦听器”)
公共无效句柄(消息)

另请参见我的答案