SpringBatch远程分区最佳实践

设置一个远程分块任务需要定义一系列的 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

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秤座的架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值