1

春のバッチ処理は初めてです。master 、複数のスレーブ、およびメッセージング用の 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" />

したがって、一度に 2 つのジョブを実行でき、残りのジョブはキューに入れられます。
2 つのジョブが送信されると、マスターはチャンクを作成してキューに送信し、スレーブは処理を行っています。

しかし、スレーブからマスターへの確認応答でエラーが発生しています

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    

これで私を助けてください。

4

2 に答える 2

0

ChunkMessageChannelItemWriter、1 つの同時ステップ用にのみ設計されています。各ジョブが独自のインスタンスを取得するように、ステップ スコープに配置する必要があります。このテスト ケースを参照してください。

編集

実は違う; これは機能しません。Bean インスタンスは同じ応答チャネルを使用しているため、互いの応答を取得する可能性があります。JIRA 課題を開きました。

于 2016-05-19T22:05:52.943 に答える