#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. Обходной путь состоит в том, чтобы ничего не разделять между заданиями, каждое задание имеет свой собственный шаг и свой собственный канал записи/ответа. Таким образом, ничего не будет смешано.