Как получить идентификатор выполнения перезапущенного задания в Spring Cloud Data Flow

Мы создали задание Spring Batch, которое будет выполняться в Spring Cloud Data Flow через Spring Cloud Task (простая задача, она только выполняет задание). Выполнение было проверено как с пользовательским интерфейсом, так и с REST API, и в идеальном случае все в порядке. Проблема возникает, когда мы пытаемся остановить и перезапустить задание. Следуя руководству по REST API:

  1. Запустите задачу: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-launching
  2. Получите информацию о выполнении задачи, используя идентификатор выполнения задачи, возвращенный в предыдущем пункте: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-detail
  3. Вот первая проблема: если мы остановим задачу с идентификатором выполнения задачи (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-stoppping) задание, связанное с задачей, останавливает свое выполнение (в журналах), но в базе данных задание остается как «НАЧАЛОСЬ». И тогда невозможно перезапустить выполнение задания, так как оно никогда не достигает статуса "ОСТАНОВЛЕН" -> Для гуру SCDF ... это не ошибка или есть техническая причина?
  4. Если мы хотим остановить задание, необходимо получить первый параметр jobExecutionIds из ответа точки 2 и сделать запрос с идентификатором выполнения задания (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-stop).
  5. Ожидая подходящего времени для завершения выполнения текущего шага, задание переходит в состояние «ОСТАНОВЛЕНА». Если сейчас мы перезапустим задание (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-restart) новую задачу создается выполнение, связанное с выполнением нового задания, и оно завершает обработку.

А теперь вопрос на миллион долларов: если мы хотим интегрировать SCDF с планировщиком (например, Control-M), как мы можем делать запросы на опрос для проверки статуса выполнения после перезапуска, если запрос перезапуска не возвращает идентификатор выполнения? Если есть просто нормальное выполнение, мы можем отправлять запросы на опрос с идентификатором выполнения задания (шаг 4), связанным с идентификатором выполнения задачи (шаг 2), но после перезапуска мы «слепые»


person RLS    schedule 19.03.2020    source источник


Ответы (2)


Здесь возникает первая проблема: если мы остановим задачу с идентификатором выполнения задачи (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-stoppping) задание, связанное с задачей, останавливает свое выполнение (в журналах), но в базе данных задание остается как «ЗАПУЩЕНО». И тогда невозможно перезапустить выполнение задания, так как оно никогда не достигает статуса «ОСТАНОВЛЕНА».

Это похоже на ошибку, и не стесняйтесь сообщать о ней на https://github.com/spring-cloud/spring-cloud-dataflow/issues. При сообщении, пожалуйста, добавьте любую дополнительную информацию, такую ​​как журнал сервера SCDF и т. Д., Чтобы лучше изучить его.

если мы хотим интегрировать SCDF с планировщиком (например, Control-M), как мы можем делать запросы на опрос для проверки статуса выполнения после перезапуска, если запрос перезапуска не возвращает идентификатор выполнения? Если есть просто нормальное выполнение, мы можем отправлять запросы на опрос с идентификатором выполнения задания (шаг 4), связанным с идентификатором выполнения задачи (шаг 2), но после перезапуска мы «слепые»

Сервер SCDF предоставляет конечные точки REST для проверки состояния выполнения заданий. Вы можете либо поразить конечные точки сервера, либо использовать REST-клиент для проверки. Дополнительную информацию о клиенте REST можно найти [здесь]. 1

person Ilayaperumal Gopinathan    schedule 20.03.2020
comment
Привет, Илаяперумал Гопинатан, спасибо за ответ. Я сообщу о проблеме на GitHub. Что касается статуса выполнения заданий, я знаю, что есть конечные точки для получения информации о выполнении, проблема в том, что мы не можем заранее узнать идентификатор выполнения. Запрос на запуск возвращает идентификатор, который можно использовать для восстановления информации, но запрос на перезапуск ничего не возвращает. - person RLS; 23.03.2020
comment
Запрос на перезапуск не возвращает идентификатор выполнения, поскольку ожидается, что он будет использовать тот же идентификатор выполнения задания, который пытается перезапустить. Не уверен, что неправильно понимаю ваше требование. - person Ilayaperumal Gopinathan; 24.03.2020
comment
В Spring Batch нельзя повторно использовать идентификатор выполнения задания, каждое выполнение (будь то запуск или перезапуск) имеет свой собственный идентификатор. Другое дело - идентификатор экземпляра задания, который является общим для запуска и перезапуска. Этот параметр представляет собой поле jobId, возвращаемое в запросе сведений о выполнении задания ссылка. - person RLS; 25.03.2020
comment
Подумав об этом, я понял, что в SCDF API есть еще один запрос для экземпляров: ссылка. И с его помощью можно получить данные (минусы в том, что нужно 4 запроса) - person RLS; 25.03.2020

Ну, я не знаю, есть ли прямой способ сделать это, но это возможное решение для интеграции с внешней системой:

  1. Запустите задачу: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-launching возвращает < em> идентификатор выполнения задачи
  2. Восстановить идентификатор выполнения задания, связанный с предыдущим идентификатором выполнения задачи: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-detail - поле идентификатор выполнения задания "executionId"
  3. Используйте идентификатор выполнения задания, чтобы остановить выполнение (возможно, оно могло быть завершено из-за ошибки): https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-stop.
  4. Используйте идентификатор выполнения задания, чтобы перезапустить / возобновить выполнение: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-restart
  5. Используйте "старый" идентификатор выполнения задания, чтобы получить идентификатор экземпляра задания: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-detail, идентификатор экземпляра задания. это поле "jobId"
  6. Используйте идентификатор экземпляра задания, чтобы получить "новый" идентификатор выполнения задания: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-instances-detail, где поле «jobExecutions» представляет собой массив выполнения, где первая позиция является последней. выполнение, поэтому мы можем получить новый идентификатор выполнения задания из поля «executionId»
person RLS    schedule 25.03.2020