【问题标题】:How to perform clean ups on spring cloud task completion如何在 Spring Cloud 任务完成时执行清理
【发布时间】:2018-06-24 23:53:06
【问题描述】:

我正在编写一个 SCDF spi 实现来支持流和任务应用程序。作为其中的一部分,我们需要在任务完成后执行一些清理操作。

有人可以提供有关 SCDF 是否会在任务完成时收到回调的信息。如果不是,那么执行清理的替代方法是什么。

【问题讨论】:

  • 您要进行哪种类型的清理?
  • 我们正在为 SCDF 流/任务编写一个平台。作为其中的一部分,我们需要为每个任务执行从 SCDF 启动一些进程。理想情况下,这些进程应该在任务执行完成后立即停止,但 SCDF 没有收到任何任务完成回调。由于任务可以是任何用户应用程序,因此必须从 SCDF 而不是任务应用程序调用这些进程。
  • 这种类型的清理可以通过TaskExecutionListener 完成。 TaskExecutionListener#onTaskEndTaskExecutionListner#onTaskFail 都可以用来清理这些进程,这是我推荐的方法。
  • 问题是 TaskExecutionListener 是 spring-cloud-task 的一部分,但不是 spring cloud deployer spi 的一部分。我们需要在 spring cloud dataflow/deployer 提供一些东西,这样我们就不会依赖任务应用程序,因为那将是用户应用程序。我可以看到 Sabby 的第 2 点是最接近的,或者另一个选项是 SCDF poll db。
  • 我认为清理任务应用程序消耗的资源是该应用程序的责任......

标签: spring spring-cloud spring-cloud-dataflow spring-cloud-task


【解决方案1】:

任务是一种短暂且有限的操作。根据您要完成的任务,您可以执行以下操作之一来调用任何自定义清理例程。

1) 运行批处理作业的任务,在该作业中,您可以将“n”个步骤定义为工作流的一部分,并且在上游步骤成功后,最后一步可以调用清理例程。

2) 你可以让stream in SCDF 监听任务完成events (批处理作业示例here,这最终可以启动另一个任务/作业来调用清理例行公事。

3) 您可以定义一个composed-task 图表(通过Dashboard/shell),其中每个步骤(也称为任务)都可以运行其预期的操作,并且在成功转换或失败事件时,您将获得机会开始清理例程。

【讨论】:

  • 谢谢萨比。 1 和 3 对我不起作用,因为它们依赖于任务定义......让我在 2 上进行探索。
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多