Удаленное разбиение на разделы Spring Batch

Я хотел бы понять интеграцию между DeployerPartitionHandler и DeployerStepExecutionHandler во время удаленного разбиения на разделы.

Как обновляются время начала, время окончания и статус выполнения выполнения родительской задачи при наличии нескольких рабочих?

Что произойдет, если один из рабочих процессов перестанет отвечать по каким-то внешним причинам? Есть ли способ справиться с этой ситуацией программно? то есть, чтобы убить неотвечающий процесс и не выполнить шаг.

Заранее благодарим за вклад!


person Sabari    schedule 13.11.2018    source источник
comment
DeployerPartitionHandler - это API из проекта Spring Cloud Task. Я предлагаю вам пометить этот вопрос знаком spring-cloud-task, чтобы кто-нибудь из команды SCT мог вам помочь.   -  person Mahmoud Ben Hassine    schedule 13.11.2018
comment
Спасибо! Я только что добавил тег spring-cloud-task   -  person Sabari    schedule 13.11.2018


Ответы (1)


У вас есть несколько вопросов, поэтому позвольте мне ответить на них по очереди.

Как обновляются время начала, время окончания и статус выполнения выполнения родительской задачи, если исполнителей несколько?

Все компоненты в этой архитектуре являются задачами. Родитель - это задача, рабочие - это каждая задача, поэтому все они обновляют репозиторий задач независимо. Родительское приложение будет отмечать время начала в начале задачи (перед вызовом каких-либо CommandLineRunner или ApplicationRunner реализаций). Он обновит время окончания и результаты после того, как все рабочие будут выполнены (поскольку шаг удаленного секционирования не будет завершен, пока все рабочие не завершатся или не истечет время ожидания).

Что произойдет, если один из рабочих процессов перестанет отвечать по каким-либо внешним причинам?

Среды развертывания, используемые DeployerPartitionHandler, зависят от платформы (CloudFoundry, Kubernetes и т. Д.) Для производственного использования. Каждая из этих платформ обрабатывает зависшие процессы по-своему, поэтому ответ на этот вопрос действительно зависит от платформы. В большинстве случаев, если процесс определяется как неисправный (независимо от определения, используемого платформой), он будет остановлен.

Есть ли способ справиться с этой ситуацией программно? то есть, чтобы убить неотвечающий процесс и не выполнить шаг.

В случае сбоя раздела во время выполнения родительский элемент также будет помечен как сбойный и его можно будет перезапустить. При перезапуске (по умолчанию) перезапускаются только отказавшие разделы. Любые уже завершенные разделы не будут повторно запущены.

person Michael Minella    schedule 13.11.2018
comment
Спасибо! для подробностей. Это проясняет мои сомнения и действительно помогает понять процесс. - person Sabari; 14.11.2018