领先一步
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
消息。对于收到的每条消息,启动器 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 绑定器)添加到您的项目中,任务将自动在任务开始和结束时发出消息。具体来说,任务将在每个点发出 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 实现,因此任何支持任务启动的部署器实现都可以与这个新的 PartitionHandler
一起使用。
了解事物如何工作的最简单方法是亲眼见证。因此,我们强化了我们的示例模块,以提供此处提到的所有功能以及一些更基本用例的示例。您可以在 Github 上查看我们的新示例。
在发布 RC 版本之前,我们还需要做一些工作,这应该与 Spring Cloud Data Flow 的相关版本保持一致。我们将忙于处理 Spring Cloud Task 中的任何最终问题,并提供 Spring Cloud Data Flow 所需的任何其他内容。
Spring Cloud Task 是一个新的令人兴奋的项目,我们认为它填补了企业开发中一个未得到充分满足的领域。但是,我们想知道您的想法。请通过 Github Issues、StackOverflow 或直接在 Twitter 上告诉我们!