Быстрый старт#
Сервис Планировщик заданий используется для:
регулярного запуска Заданий по расписанию;
запуска Задания по требованию.
Рассмотрим данные сценарии с точки зрения:
Использование сервиса оператором с помощью пользовательского интерфейса UI#
Batch Scheduler является подключаемым сервисом, поэтому после авторизации пользователю сразу доступна главная страница сервиса Планировщик заданий.
Для начала работы с сервисом:
Создайте Задание с запуском по требованию.
Запустите Задание на выполнение.
Отредактируйте Задание для запуска по расписанию.
Проверьте статус выполнения Задания.
Удалите Задание.
Шаг 1. Создание Задания с запуском по требованию#
Нажмите кнопку Создать задание.
В открывшемся модальном окне:
Заполните поля: Имя задания — Job, URL адрес, например —
https://httpstat.us/200?sleep=200.Из выпадающего списка в поле Метод выберите метод — POST.
Нажмите кнопку Сохранить.
Шаг 2. Запуск Задания на выполнение#
Напротив созданного Задания нажмите кнопку Запустить
.В открывшемся модальном окне Запуск задания выберите Да.
Проверьте статус выполнения, нажав на Задание. В развернувшейся форме Задания на вкладке Статистика проверьте описание последней попытки запуска и описание результата запуска вычислений.
Шаг 3. Редактирование Задания для запуска по расписанию#
Отредактируйте Задание, нажав кнопку Редактировать
.В открывшемся модальном окне Редактирование задания в поле Описание введите — «Не указывать информацию К1/К2».
Шаг 4. Проверка статуса выполнения Задания#
Через 2 мин проверьте статус выполнения, нажав на Задание Job. В развернувшейся форме Задания на вкладке Статистика проверьте описание последней попытки запуска и описание результата запуска вычислений.
Шаг 5. Удаление Задания#
Напротив Задания Job нажмите кнопку Удалить
. Убедитесь, что на странице Планировщик Заданий Задание Job не отображается.
Подробнее о работе UI и других функциях см. в Руководстве оператора.
Использование сервиса прикладным разработчиком вызовом методов API#
Для начала работы с сервисом:
Выполните локальное развертывание демо-приложения Планировщика заданий.
Создайте Задание.
Запустите Задание на выполнение.
Проверьте статус выполнения Задания.
Шаг 1. Развертывание демо-приложения Планировщик заданий#
Для взаимодействия с демо-приложением необходимо иметь:
запущенный сервис Планировщик заданий.
Подробнее о составе демо-приложения Планировщик заданий — см. подраздел «Состав демо-приложения».
Распакуйте
batch-scheduler-quick-start.zipи откройте каталог с помощью среды разработки (IDE).Настройте файл
application.yml, содержащий следующие параметры:
url— адрес, на котором запущен сервис Планировщика заданий;httpTarget— адрес, на котором будет запущено клиентское приложение и куда будет приходить вызов Заданий.
Пример application.yml:
batch:
scheduler:
url: http://localhost:8081
httpTarget: http://localhost:8080
Соберите демо-приложение, выполнив в терминале команду:
mvn clean install.Запустите демо-приложение, выполнив в терминале команду:
java -jar target/scheduler-0.0.1-SNAPSHOT.jar.
Шаг 2. Создание Задания#
Для создания Задания введите в поисковую строку браузера URL: "http://localhost:8080/batch/v1/jobs/create" и нажмите Enter для отправки запроса. Целью Задания является вызов на выполнение httpTarget.
В ответ на отправленный запрос на странице браузера отображается информация о созданном Задании:
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"name": "New_Job",
"description": "",
"schedule": "",
"state": "ENABLED",
"httpTarget": {
"url": "http://localhost:8080/httpTarget/200",
"method": "GET",
"headers": {},
"body": ""
},
"updateTime": "2021-02-15T10:03:51.275Z",
"lastAttempt": null,
"onlyOneInstance": false
}
}
Шаг 3. Запуск Задания#
Для запуска Задания введите в поисковую строку браузера URL: "http://localhost:8080/batch/v1/jobs/run" и нажмите Enter для отправки запроса.
Шаг 4. Проверка статуса выполнения Задания#
Для проверки статуса выполнения Задания введите в поисковую строку браузера URL: "http://localhost:8080/batch/v1/jobs/get" и нажмите Enter для отправки запроса.
Обратите внимание, что параметры lastAttempt для Задания были обновлены и содержат актуальное время попытки запуска вычисления и получения ответа, а responseStatus.message теперь содержит результат выполнения httpTarget:
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"name": "New_Job",
"description": "",
"schedule": "",
"state": "ENABLED",
"httpTarget": {
"url": "http://localhost:8080/httpTarget/200",
"method": "GET",
"headers": {},
"body": ""
},
"updateTime": "2021-02-15T10:14:12.645Z",
"lastAttempt": {
"scheduleTime": "2021-02-15T10:14:12.636Z",
"dispatchTime": "2021-02-15T10:14:12.636Z",
"responseTime": "2021-02-15T10:14:12.645Z",
"responseStatus": {
"code": 200,
"message": "200 OK"
}
},
"onlyOneInstance": false
}
}
Состав демо-приложения#
Демо-приложение Планировщика заданий состоит из следующих основных компонентов:
Application— настройки адресов для демо-приложения Планировщика заданий;HttpService— HTTP-client для вызова JSON-RPC API;Controller— REST-контроллер с примерами вызовов API Планировщика заданий.
Controller#
Контроллер включает в себя:
объект
HttpTarget— пример клиентского сервиса, который будет вызываться Планировщиком заданий на выполнение;метод
Create— пример вызова API для создания Задания;метод
Get— пример вызова API для получения Задания;метод
Run— пример вызова API для запуска Задания.
Объект HttpTarget#
Объект HttpTarget — это объект запуска вычислений, оформленный в виде запроса по протоколу HTTP(S). В данном демо-приложении объект httpTarget рассматривается на примере клиентского сервиса, обращение к которому происходит из создаваемого клиентом Задания.
@RequestMapping("/httpTarget/200")
public String httpTarget() {
// here you implement your business logic
return "200 OK";
}
Note
По умолчанию в демо-приложении объект httpTarget возвращает ответ 200 ОК. При изменении возвращаемого значения при вызове Заданием объекта httpTarget клиента возвращаемое значение изменится.
Метод Create#
Метод Create содержит пример программной реализации создания Задания в Планировщике заданий (при помощи вызова соответствующего API сервиса). При обращении к URL /job/create/{jobName} будет создано Задание с наименованием {jobName}.
@RequestMapping("/job/create/{jobName}")
public String createJob(@PathVariable String jobName) {
JSONObject httpTarget = new JSONObject();
httpTarget.put("url", httpTargetUrl + "/httpTarget/200");
httpTarget.put("method", "GET");
httpTarget.put("headers", new JSONObject());
httpTarget.put("body", "");
JSONObject params = new JSONObject();
params.put("name", jobName);
params.put("description", "");
params.put("schedule", "");
params.put("httpTarget", httpTarget);
return service.post(buildQuery("create", params));
}
Note
Здесь и далее service — компонент HttpService для отправки запросов по HTTP-протоколу.
Задание будет содержать следующий набор параметров:
name— имя создаваемого Задания;description— описание создаваемого Задания;schedule— запланированное время запуска Задания в cron-формате (минимальный интервал запуска задания — раз в 15 c (0/15 * * * * *)). В примере время запуска не установлено, поэтому запуск Задания выполняется по требованию с помощью методаrun;httpTarget— объект, содержащий:url— адрес вызываемого клиентского сервиса:{httpTargetUrl}/httpTarget/200,method— GET,headers— список HTTP-заголовков,body— тело запроса в кодировке UTF-8.
Метод Run#
Метод Run содержит пример программной реализации принудительного запуска Задания в Планировщике заданий. При обращении к URL /job/run/{jobName} Задание с наименованием {jobName} запускается на выполнение.
@RequestMapping("/job/run/{jobName}")
public String runJob(@PathVariable String jobName) {
JSONObject params = new JSONObject();
params.put("name", jobName);
return service.post(buildQuery("run", params));
}
Метод Get#
Метод Get содержит пример программной реализации получения атрибутов Задания в Планировщике заданий (при помощи вызова соответствующего API сервиса). При обращении к URL /job/get/{jobName} будет получен объект Задания с наименованием {jobName}.
@RequestMapping("/job/get/{jobName}")
public String getJob(@PathVariable String jobName) {
JSONObject params = new JSONObject();
params.put("name", jobName);
return service.post(buildQuery("get", params));
}