首页 > 解决方案 > Spring Cloud Task - 远程分区问题

问题描述

我们有 Spring Cloud Data Flow 本地设置,任务正在运行 Spring Batch 作业,该作业从数据库读取并写入 AWS S3,所有这些工作正常。

  1. 在停止 JOB 时,任务停止但无法恢复作业,因为状态为“STARTED”,我认为我们可以在代码中处理,通过在触发停止时将批处理状态设置为“STOPPED” ,如果无法处理,请纠正我?
  2. 此外,在尝试停止单个从属任务时,还会出现错误:

    2020-03-27 10:48:48.140 INFO 11258 --- [nio-9393-exec-7] .scdssiDefaultTaskExecutionService :平台默认的 id 192 的任务执行停止请求已提交 2020-03-27 10:48:48.144错误 11258 --- [nio-9393-exec-7] oscdscRestControllerAdvice:处理请求时捕获异常

    java.lang.NullPointerException:在 org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService.cancelTask​​Execution(DefaultTaskExecutionService.java:669) 处为空 ~[spring-cloud-dataflow-server-core-2.3.0.RELEASE。 jar!/:2.3.0.RELEASE] 在 org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService.lambda$stopTaskExecution$0(DefaultTaskExecutionService.java:583) ~[spring-cloud-dataflow-server-core- 2.3.0.RELEASE.jar!/:2.3.0.RELEASE]

  3. 我们如何在分布式环境中实现这一点,我们有一个主服务器,它可以在主服务器上启动主服务器并在相应的从服务器上启动工作人员?

标签: springspring-batchspring-cloudspring-cloud-dataflowspring-cloud-task

解决方案


1)您是正确的,您需要将您的状态从 STARTED 更改为 FAILED。

2)由于远程分区使用Spring Cloud Deployer(不是Spring Cloud Data Flow)来启动worker任务,SCDF没有办法确定平台信息来正确停止worker任务。我添加了 GH Issue spring-cloud/spring-cloud-dataflow#3857 来解决这个问题。

3)当前实现阻止用户在多个服务器上启动,而是让平台(Kubernetes、Cloud Foundry)分发工作任务。您可以实现自己的部署程序来添加此功能。


推荐阅读