Spring Cloud Stream 集成
单个任务本身可能很有用,但将任务集成到更大的生态系统中,可以使其在更复杂的处理和编排中发挥作用。本节将介绍 Spring Cloud Task 与 Spring Cloud Stream 的集成选项。
Spring Cloud Task 事件
Spring Cloud Task 提供了在任务通过 Spring Cloud Stream 通道运行时,通过 Spring Cloud Stream 通道发出事件的能力。任务监听器用于在名为 task-events 的消息通道上发布 TaskExecution。此功能会自动装配到任何在其类路径上具有 spring-cloud-stream、spring-cloud-stream-<binder> 和已定义任务的应用程序中。
要禁用事件发射监听器,请将 spring.cloud.task.events.enabled 属性设置为 false。
定义好合适的类路径后,以下任务会在 task-events 通道上发出 TaskExecution 事件(在任务开始和结束时都会发出):
@SpringBootApplication
public class TaskEventsApplication {
public static void main(String[] args) {
SpringApplication.run(TaskEventsApplication.class, args);
}
@Configuration
public static class TaskConfiguration {
@Bean
public ApplicationRunner applicationRunner() {
return new ApplicationRunner() {
@Override
public void run(ApplicationArguments args) {
System.out.println("The ApplicationRunner was executed");
}
};
}
}
}
类路径上还需要有一个 binder 实现。
一个示例任务事件应用程序可以在 Spring Cloud Task 项目的示例模块中找到,点击此处。
禁用特定任务事件
要禁用任务事件,你可以将 spring.cloud.task.events.enabled 属性设置为 false。
Spring Batch 事件
当通过任务执行 Spring Batch 作业时,可以配置 Spring Cloud Task 以基于 Spring Batch 中可用的监听器发出信息性消息。具体来说,以下 Spring Batch 监听器会自动配置到每个批处理作业中,并在通过 Spring Cloud Task 运行时,在关联的 Spring Cloud Stream 通道上发出消息:
-
JobExecutionListener监听job-execution-events -
StepExecutionListener监听step-execution-events -
ChunkListener监听chunk-events -
ItemReadListener监听item-read-events -
ItemProcessListener监听item-process-events -
ItemWriteListener监听item-write-events -
SkipListener监听skip-events
当上下文中存在适当的bean(一个Job和一个TaskLifecycleListener)时,这些监听器会自动配置到任何AbstractJob中。监听这些事件的配置方式与绑定到任何其他Spring Cloud Stream通道的方式相同。我们的任务(运行批处理作业的任务)充当Source,而监听应用程序则充当Processor或Sink。
例如,可以让一个应用程序监听 job-execution-events 通道,以获取作业的启动和停止信息。要配置监听应用程序,您需要将输入配置为 job-execution-events,如下所示:
spring.cloud.stream.bindings.input.destination=job-execution-events
类路径上还需要有一个 binder 实现。
可以在 Spring Cloud Task 项目的示例模块中找到批处理事件应用的示例,点击此处查看。
向不同渠道发送批量事件
Spring Cloud Task 为批处理事件提供的一个选项是能够更改特定监听器发送消息的通道。为此,请使用以下配置:spring.cloud.stream.bindings.<通道名称>.destination=<新目标>。例如,如果 StepExecutionListener 需要将其消息发送到名为 my-step-execution-events 的另一个通道,而不是默认的 step-execution-events,您可以添加以下配置:
spring.cloud.task.batch.events.step-execution-events-binding-name=my-step-execution-events
禁用批量事件
要禁用所有批处理事件的监听器功能,请使用以下配置:
spring.cloud.task.batch.events.enabled=false
要禁用特定的批处理事件,请使用以下配置:
spring.cloud.task.batch.events.<batch event listener>.enabled=false:
以下列表展示了您可以禁用的独立监听器:
spring.cloud.task.batch.events.job-execution.enabled=false
spring.cloud.task.batch.events.step-execution.enabled=false
spring.cloud.task.batch.events.chunk.enabled=false
spring.cloud.task.batch.events.item-read.enabled=false
spring.cloud.task.batch.events.item-process.enabled=false
spring.cloud.task.batch.events.item-write.enabled=false
spring.cloud.task.batch.events.skip.enabled=false
批处理事件的发出顺序
默认情况下,批处理事件的优先级为 Ordered.LOWEST_PRECEDENCE。要更改此值(例如改为 5),请使用以下配置:
spring.cloud.task.batch.events.job-execution-order=5
spring.cloud.task.batch.events.step-execution-order=5
spring.cloud.task.batch.events.chunk-order=5
spring.cloud.task.batch.events.item-read-order=5
spring.cloud.task.batch.events.item-process-order=5
spring.cloud.task.batch.events.item-write-order=5
spring.cloud.task.batch.events.skip-order=5