是实施任务还是基于流的方法

问题描述

我有一个数据管道过程,该过程运行12个小时。它轮询目录中的文件,每15分钟触发一次。基于某些业务逻辑,它要么将消息发布到消息队列,要么进行一些数据库的插入/更新。我想出了两种方法

  1. 我将其作为任务运行,但是在那种情况下,如何在不将我的代码紧密耦合到任何特定消息队列提供者的情况下发布消息?
  2. 我将其作为流运行,但是在这种情况下,它必须运行24/7,尽管该过程不需要运行12个小时以上。

在SCDF中构建此过程的最佳方法是什么?

解决方法

您可以让您的Spring Cloud Task应用程序将任务事件生成到消息传递系统中。这可以通过在应用程序中添加依赖项spring-cloud-task-stream来完成。有关此的更多信息,您可以在此处引用documentation

关于运行流还是批量运行的问题完全取决于您的决定,具体取决于各种因素,包括运行该平台的平台和成本等。

以下是一些选项:

  • SCDF支持Kubernetes和CloudFoundry中的任务调度。如果您在以下环境之一中,则可以安排 task检查传入文件并完成任务 (1)将消息发布到已配置的消息传递系统(通过上述spring-cloud-task-stream) (2)jdbc插入/更新(您需要在批处理中对此进行定义)

  • 如果无法手动取消部署/重新部署流,则可以使用SCDF REST客户端通过自定义任务应用程序触发流deploy/undeploy。这样,您可以控制何时运行流。