通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序

Posted

技术标签:

【中文标题】通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序【英文标题】:Deploy Spring Batch application on Spring Cloud Data Flow by running the batch microservice separately 【发布时间】:2019-10-02 12:13:37 【问题描述】:

我有一个 Spring 批处理应用程序,我希望有两个选项来触发批处理:

    公开一个 REST api 调度器

通过将批处理应用程序打包为任务,我可以将应用程序部署在单独运行的 SCDF 服务器上。我正在 SCDF 服务器上创建任务类型的应用程序并引用批处理应用程序的 jar 文件。然后使用应用程序任务创建一个任务。

我知道 SCDF 会公开 REST 接口以按计划和一次性触发任务,但是我想将触发器保留在批处理本身中,因为我们需要使用单独的定义公开 REST 接口。

是否可以将 Spring 批处理应用程序作为 Spring Boot 微服务单独运行并注册为 SCDF 服务器的任务?

【问题讨论】:

【参考方案1】:

是否可以将 Spring 批处理应用程序作为 Spring Boot 微服务单独运行并注册为 SCDF 服务器的任务?

不,SCDF 中的任务定义需要让您利用 SCDF 的 RESTful 端点来启动或安排它以进行重复运行。 SCDF 中没有自动发现独立运行的任意批处理作业的机制。除非从 SCDF 中建立足迹,否则我们没有任何跟踪能力来管理独立应用程序。

另一个需要注意的重要区别是:任务。 SCDF 中的任务是短暂的。它们启动、执行业务操作,并在业务逻辑完成时关闭。

为了让这个核心设计在 Kubernetes 和 Cloud Foundry 等云平台中运行,我们期望任务/批处理应用程序与 RESTful 控制器捆绑在一起。同样,任务也没有可用的健康检查。在你添加 RESTful 特性的那一刻,它就需要作为一个长时间运行的应用程序运行(因为你希望端点可以从其他服务访问),这将违反云平台中任务的设计前提。

【讨论】:

以上是关于通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring Boot创建微服务

spring cloud 网关服务

Spring Boot - 如何在微服务之间进行通信?

Spring Cloud微服务如何设计异常处理机制?

Spring Boot 微服务授权

最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇