繁体   English   中英

SPRING BATCH:如何为任务执行程序中运行的多个作业配置远程分块

[英]SPRING BATCH : How to configure remote chunking for multiple jobs running in a task executor

我是春季批处理的新手。 我正在使用远程分块 ,其中有一个master,多个slave和ActiveMQ进行消息传递。

大师有一个工作和一个工作启动器,而工作启动器有一个任务执行器 ,它具有以下配置
<task:executor id="batchJobExecutor" pool-size="2"queue-capacity="100" />
块配置为

<bean id="chunkWriter"
    class="org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter" scope="step">
    <property name="messagingOperations" ref="messagingGateway" />
    <property name="replyChannel" ref="replies" />
    <property name="throttleLimit" value="50" />
    <property name="maxWaitTimeouts" value="60000" />
</bean>

<bean id="chunkHandler"
    class="org.springframework.batch.integration.chunk.RemoteChunkHandlerFactoryBean">
    <property name="chunkWriter" ref="chunkWriter" />
    <property name="step" ref="someJobId" />
</bean>

<integration:service-activator
    input-channel="requests" output-channel="replies" ref="chunkHandler" />

因此,我们可以一次运行两个作业,其余的作业将排在队列中。
当提交两个作业时,主服务器正在创建块并提交到队列,而从服务器正在处理。

但是从机到主机的确认给出了错误

java.lang.IllegalStateException: Message contained wrong job instance id [9331] should have been [9332].
at org.springframework.util.Assert.state(Assert.java:385) ~[Assert.class:4.1.6.RELEASE]
at org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter.getNextResult    

请帮我解决一下这个。

ChunkMessageChannelItemWriter仅设计用于一个并发步骤-您需要将其放在步骤作用域中,以便每个作业都有自己的实例- 请参见此测试用例

编辑

其实没有; 那是行不通的-由于Bean实例使用相同的回复通道,因此它们可以获取彼此的回复。 我打开了JIRA Issue

这是一篇非常古老的文章,但是我认为您在这里看到的问题可能与节流阀极限大于maxWaitTimouts4

我们已经看到的是,作业完成后,该实现从答复队列中读取的内容不会超过maxWaitTimeouts项。 我认为这是一个错误。

另请参阅我在stackoverflow上问的问题: 远程批处理作业不会读取afterStep方法中的所有响应

我也为此做了一个错误报告: https : //jira.spring.io/browse/BATCH-2651,并且正在创建PR来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM