设置一个远程分块任务需要定义一系列的 beans:
- 一个连接工程来从消息中间件中获得连接,消息中间件包括有(JMS,AMQP 和其他)
- 一个
MessagingTemplate
来从主向从发送消息,然后再次发送回来 - 为 Spring 整合从消息中间件中获得消息来创建一个输入和输出通道
- 一个特殊的内容写(item writer)(ChunkMessageChannelItemWriter)在主机侧,这样真多处理和写入能够知道如何发送分块数据到工作机
- 在工作机侧的消息监听器(ChunkProcessorChunkHandler)来从主机上接受数据
这个在第一次看来的时候好像非常复杂,并且是一个艰巨的任务。在新发布的版本中我们介绍使用注解 @EnableBatchIntegration
来作为一个新的 API(RemoteChunkingMasterStepBuilder
和 RemoteChunkingWorkerBuilder
) 来简化配置。下面的示例显示了如何使用新的注解和 API:
@Configuration @EnableBatchProcessing @EnableBatchIntegration public class RemoteChunkingAppConfig { @Autowired private RemoteChunkingMasterStepBuilderFactory masterStepBuilderFactory; @Autowired private RemoteChunkingWorkerBuilder workerBuilder; @Bean public TaskletStep masterStep() { return this .masterStepBuilderFactory .get( "masterStep" ) .chunk( 100 ) .reader(itemReader()) .outputChannel(outgoingRequestsToWorkers()) .inputChannel(incomingRepliesFromWorkers()) .build(); } @Bean public IntegrationFlow worker() { return this .workerBuilder .itemProcessor(itemProcessor()) .itemWriter(itemWriter()) .inputChannel(incomingRequestsFromMaster()) .outputChannel(outgoingRepliesToMaster()) .build(); } // Middleware beans setup omitted } |
这个新的注解和构造器配置了 beans 中最难配置的部分。现在你可以非常容易的配置主机和 Spring 整合到工作机。你可以找到远程分块示例。用户在这个示例中使用了 samples module API,有关更多细节的内容请参考 Spring Batch Integration 章节。
与远程快配置简单化一样,这个新的版本将会介绍新的 API 来简化远程分区设置:RemotePartitioningMasterStepBuilder
和 RemotePartitioningWorkerStepBuilder。
这些可以自动重写你的配置类,如果 @EnableBatchIntegration
出现了的话,具体的示例代码请参考下面的示例:
@Configuration @EnableBatchProcessing @EnableBatchIntegration public class RemotePartitioningAppConfig { @Autowired private RemotePartitioningMasterStepBuilderFactory masterStepBuilderFactory; @Autowired private RemotePartitioningWorkerStepBuilderFactory workerStepBuilderFactory; @Bean public Step masterStep() { return this .masterStepBuilderFactory .get( "masterStep" ) .partitioner( "workerStep" , partitioner()) .gridSize( 10 ) .outputChannel(outgoingRequestsToWorkers()) .inputChannel(incomingRepliesFromWorkers()) .build(); } @Bean public Step workerStep() { return this .workerStepBuilderFactory .get( "workerStep" ) .inputChannel(incomingRequestsFromMaster()) .outputChannel(outgoingRepliesToMaster()) .chunk( 100 ) .reader(itemReader()) .processor(itemProcessor()) .writer(itemWriter()) .build(); } // Middleware beans setup omitted } |