先行一步
VMware 提供培训和认证,加速您的进步。
了解更多我们很高兴地宣布 Spring Cloud Task 1.0.0.M2 版本发布。这是 Spring Cloud Task 项目的第二个里程碑,带来了一些令人兴奋的新特性!
随着 Spring Cloud Task 的 M1 版本发布,我们引入了任务的概念、@EnableTask
注解以及具有终结状态的微服务的一般概念。从那时起,我们一直非常忙碌。新特性的一些亮点包括:
让我们看看每个特性都包含什么。
在任务执行之前或之后(或两者)执行逻辑可能很有用。此版本引入了一个接口 TaskExecutionListener
以及注解 @BeforeTask
和 @AfterTask
,允许用户定义在任务执行之前或完成后执行的逻辑。
将 Spring Cloud Task 与 Spring Cloud Stream 集成,为开发者编排数据微服务创建了一个强大的工具。在此版本的 Spring Cloud Task 中,我们在这两个项目之间添加了一些集成点。
第一个集成点是能够基于通过流发送的消息启动任务。通过使用 @EnableTaskLauncher
注解和正确的依赖项创建一个 Boot 应用程序,您将获得一个 Spring Cloud Stream Sink,它监听 TaskLaunchRequest
消息。对于接收到的每条消息,launcher sink 将启动请求的任务。
@SpringBootApplication
@EnableTaskLauncher
public class TaskSinkApplication {
public static void main(String[] args) {
SpringApplication.run(TaskSinkApplication.class, args);
}
}
截至本文撰写之时,本地和 Apache YARN 的启动器均已可用,CloudFoundry、Apache Mesos 和 Kubernetes 的启动器目前都在开发中。
Spring Cloud Task 和 Spring Cloud Stream 之间的另一个集成点是 Spring Cloud Task 将事件发布到 Spring Cloud Stream 通道的能力。在您的项目中添加 spring-cloud-task-stream
依赖项(以及您选择的 Spring Cloud Stream binder),任务将在启动和结束时自动发出消息。具体来说,任务将在这些点发出 TaskExecution
,允许上游应用程序在任务启动、结束以及获取结果时收到通知。
使用 Spring Cloud Task 的一个常见用例是运行 Spring Batch 作业。因此,我们在一个新模块 spring-cloud-task-batch
中添加了这两个项目之间几个有趣的集成点。
第一个集成点是通过 Spring Cloud Stream 通道发送批处理信息性消息。类似于 Spring XD 容器提供的功能,作为任务运行的批处理作业(具有适当的依赖项)可以在无需额外配置的情况下发出信息性消息。以下监听器会发出某种事件:
JobExecutionListener
StepExecutionListener
ChunkListener
ItemReadListener
ItemProcessListener
ItemWriteListener
SkipListener
第二个集成点是一个新的 PartitionHandler
,即 DeployerPartitionHandler
。此 PartitionHandler
实现允许远程分区批处理作业中的工作节点作为任务启动,而不是提前部署并要求监听工作。这带来的好处是工作节点只在执行工作时才部署和运行,并且一旦工作完成就应该关闭和清理。DeployerPartitionHandler
将任务的启动委托给 Spring Cloud Deployer 实现,因此任何支持任务启动的 deployer 实现都可以与这个新的 PartitionHandler
一起使用。
理解事物如何工作最简单的方法是亲眼看到它们运行。因此,我们加强了示例模块,提供了此处提到的所有功能的示例以及一些更基本的使用案例。您可以在 Github 上查看我们的新示例。
在我们发布 RC 版本之前还有一些工作要做,RC 版本应该与 Spring Cloud Data Flow 的相关发布同步。我们将忙于处理 Spring Cloud Task 中的任何最终问题,并提供 Spring Cloud Data Flow 所需的任何其他功能。
Spring Cloud Task 是一个令人兴奋的新项目,我们认为它填补了企业开发中一个服务不足的领域。但是,我们想知道您的想法。请通过 Github Issues、StackOverflow 或直接在 Twitter 上告诉我们!