Исходящий шлюз JMS — Получение ответов от двух экземпляров заданий

#spring-batch #spring-integration #spring-jms #spring-batch-integration

Вопрос:

Мы используем JMSOutboundGateway для отправки сообщений и получения сообщений с использованием канала ответа в JMSOutboundGateway. Когда мы выполняем несколько итераций одного и того же задания, используя один и тот же JMSOutboundGateway, он завершается с ошибкой «Сообщение, содержащее неправильный идентификатор экземпляра задания [85], должно было быть [86]» ( org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter.getNextResult() ) .

Это связано с тем, что тот же экземпляр JMSOutBoundGateway используется при запуске второго, когда первое задание все еще выполняется.

Есть ли способ запустить параллельное выполнение одного и того же типа задания ?

Ответ №1:

Это известная проблема, см. https://github.com/spring-projects/spring-batch/issues/1372 и https://github.com/spring-projects/spring-batch/issues/1096.

Обходной путь заключается в использовании отдельного экземпляра средства записи для каждого задания, чтобы предотвратить совместное использование одного и того же канала ответов.

Комментарии:

1. Я пробовал chunk writer в области прототипа, а также в области шага, но все равно он выдает ту же ошибку. ( область действия=»прототип» область действия=»шаг» )

2. Я не имел в виду ограниченные бобы (это не будет работать, как указано в github.com/spring-projects/spring-batch/issues/1096 которым я поделился в ответе), но два отдельных компонента, по одному для каждого задания/шага.

3. Я не сталкиваюсь с этой проблемой в течение нескольких шагов для работы. Я сталкиваюсь с этой проблемой,когда отправляю задание с параметрами ( x, y), пока оно выполняется, я отправляю задание B с теми же параметрами. В то время как и JobA, и JobB находятся в процессе, это приводит к смешению результатов. Если это для двух разных этапов одной и той же работы, то я мог бы легко реализовать, как вы сказали, используя 2 разных компонента.

4. Есть ли другие способы решения этой проблемы ? Выполнение параллельного выполнения одного и того же задания является общим требованием. Интересно, как люди этим пользуются.

5. Обходной путь состоит в том, чтобы ничего не разделять между заданиями, каждое задание имеет свой собственный шаг и свой собственный канал записи/ответа. Таким образом, ничего не будет смешано.