SpringBatch 系列之 Remote-Chunking
1、概要
前面的文章介绍了Spring Batch并发并行的批处理能力,但是还不够,单台机器的性能终归有极限,因此我们有些场景就可以考虑使用多台机器来处理。
本文我们将介绍remote chunking
,第一篇简单介绍Spring Batch多机器处理披露任务的能力。
2、什么是`remote chunking`
remote chunking
将数据读和写拆分到一个master多个slave机器上。master机器负责读数据并且分发数据到slave机器。master机器在Step
中读取数据,并通过像JMS这样的技术将块处理部分交给salve机器。
在master端,RemoteChunkingManagerStepBuilderFactory
允许我们通过声明如下内容配置master步骤
配置
item reader
读取数据发送给workers配置
output channel(Outgoing requests)
发送请求给workers配置
input channel(Incoming replies)
接收workers响应
没有必要显式声明ChunkMessageChannelItemWriter
和MessagingTemplate
默认即可(如果需要也可以以显式配置出来)
在worker端,RemoteChunkingWorkerBuilder
允许有如下配置
通过
input channel(Incoming requests)
监听master端发出的请求为每一个请求调用
ChunkProcessorChunkHandler
的handleChunk
方法执行配置好的ItemProcessor
和ItemWriter
通过
output channel (Outgoing replies)
发送响应到master端
没有必要显式声明SimpleChunkProcessor
和ChunkProcessorChunkHandler
默认即可(如有必要也可以显式配置出来)
从4.1版本开始,Spring Batch Integration通过注解@EnableBatchIntegration
简化了remote chunking
步骤。这个注解主要作用是方便注入如下两个bean
RemoteChunkingManagerStepBuilderFactory
: 在master端配置RemoteChunkingWorkerBuilder
:用于配置worker端处理流程
3、开始多进程之旅
3.1、添加依赖
在之前的maven配置基础之上,添加如下依赖
3.2、配置ActiveMQ
3.3、Master端程序
3.4、Worker端程序
3.5、启动Master&Worker
为了查看效果,我先执行了package命令,打了一个可执行jar包,然后分别启动master和woker
启动Master
java -jar fucking-great-springbatch-0.0.1-SNAPSHOT.jar --spring.profiles.active=master --server.port=8080
启动Worker
java -jar fucking-great-springbatch-0.0.1-SNAPSHOT.jar --spring.profiles.active=worker --server.port=8081
3.6、调用接口测试
通过执行如下命令或者通过浏览器打开如下地址
wget http://localhost:8080/launchRemoteChunkingJob
执行完成之后,通过日志我们可以看到master和worker分别有相应日志输出,worker端负责消费
4、附录
https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html#remoteChunking
版权声明: 本文为 InfoQ 作者【稻草鸟人】的原创文章。
原文链接:【http://xie.infoq.cn/article/6dec472e85ad0ae6dd5055ba9】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论 (2 条评论)