設置一個遠程分塊任務需要定義一系列的 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
}
有關這個新註解的更多細節,請參考 Spring Batch Integration 章節中的內容。
https://www.cwiki.us/display/SpringBatchZH/@EnableBatchIntegration+Annotation