Как получить идентификатор выполнения перезапущенного задания в Spring Cloud Data Flow - PullRequest
0 голосов
/ 19 марта 2020

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

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

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

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

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

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

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

...