spring - Spring Cloud Task - 远程分区问题
问题描述
我们有 Spring Cloud Data Flow 本地设置,任务正在运行 Spring Batch 作业,该作业从数据库读取并写入 AWS S3,所有这些工作正常。
- 在停止 JOB 时,任务停止但无法恢复作业,因为状态为“STARTED”,我认为我们可以在代码中处理,通过在触发停止时将批处理状态设置为“STOPPED” ,如果无法处理,请纠正我?
此外,在尝试停止单个从属任务时,还会出现错误:
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.cancelTaskExecution(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]
我们如何在分布式环境中实现这一点,我们有一个主服务器,它可以在主服务器上启动主服务器并在相应的从服务器上启动工作人员?
解决方案
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)分发工作任务。您可以实现自己的部署程序来添加此功能。
推荐阅读
- python - 在熊猫中按组添加缺失年份的行
- c++ - 用win32api c++绘制图标
- javascript - 当在另一个输入元素中显示和编辑时,如何更新本地存储中保存的输入值?
- c# - CreateEnvelope() 抛出异常。没有消息
- kotlin - 以可变小时数舍入到顺序值 - Kotlin
- google-sheets - 如果未使用公式,则对 Google 表格进行条件格式设置
- javascript - 除非我在调试器中遍历代码,否则 iframe 似乎不会更新 src
- python - scipy.solve_ivp:在第二次发生事件时终止轨迹
- reactjs - 基于函数参数的条件类型检查
- python - Python 中的文本冒险游戏 - 从具有加权属性的文本文件中创建随机选择的项目