Быстрый старт#

Сервис Планировщик заданий используется для:

  • регулярного запуска Заданий по расписанию;

  • запуска Задания по требованию.

Рассмотрим данные сценарии с точки зрения:

Использование сервиса оператором с помощью пользовательского интерфейса UI#

Batch Scheduler является подключаемым сервисом, поэтому после авторизации пользователю сразу доступна главная страница сервиса Планировщик заданий.

Для начала работы с сервисом:

  1. Создайте Задание с запуском по требованию.

  2. Запустите Задание на выполнение.

  3. Отредактируйте Задание для запуска по расписанию.

  4. Проверьте статус выполнения Задания.

  5. Удалите Задание.

Шаг 1. Создание Задания с запуском по требованию#

Нажмите кнопку Создать задание.

В открывшемся модальном окне:

  1. Заполните поля: Имя задания — Job, URL адрес, например — https://httpstat.us/200?sleep=200.

  2. Из выпадающего списка в поле Метод выберите метод — POST.

  3. Нажмите кнопку Сохранить.

Шаг 2. Запуск Задания на выполнение#

  1. Напротив созданного Задания нажмите кнопку Запустить Запустить.

  2. В открывшемся модальном окне Запуск задания выберите Да.

  3. Проверьте статус выполнения, нажав на Задание. В развернувшейся форме Задания на вкладке Статистика проверьте описание последней попытки запуска и описание результата запуска вычислений.

Шаг 3. Редактирование Задания для запуска по расписанию#

  1. Отредактируйте Задание, нажав кнопку Редактировать Редактировать.

  2. В открывшемся модальном окне Редактирование задания в поле Описание введите — «Не указывать информацию К1/К2».

Шаг 4. Проверка статуса выполнения Задания#

Через 2 мин проверьте статус выполнения, нажав на Задание Job. В развернувшейся форме Задания на вкладке Статистика проверьте описание последней попытки запуска и описание результата запуска вычислений.

Шаг 5. Удаление Задания#

Напротив Задания Job нажмите кнопку Удалить Удалить. Убедитесь, что на странице Планировщик Заданий Задание Job не отображается.

Подробнее о работе UI и других функциях см. в Руководстве оператора.

Использование сервиса прикладным разработчиком вызовом методов API#

Для начала работы с сервисом:

  1. Выполните локальное развертывание демо-приложения Планировщика заданий.

  2. Создайте Задание.

  3. Запустите Задание на выполнение.

  4. Проверьте статус выполнения Задания.

Шаг 1. Развертывание демо-приложения Планировщик заданий#

  1. Для взаимодействия с демо-приложением необходимо иметь:

Подробнее о составе демо-приложения Планировщик заданий — см. подраздел «Состав демо-приложения».

  1. Распакуйте batch-scheduler-quick-start.zip и откройте каталог с помощью среды разработки (IDE).

  2. Настройте файл application.yml, содержащий следующие параметры:

  • url — адрес, на котором запущен сервис Планировщика заданий;

  • httpTarget — адрес, на котором будет запущено клиентское приложение и куда будет приходить вызов Заданий.

Пример application.yml:

batch:
    scheduler:
        url: http://localhost:8081
        httpTarget: http://localhost:8080
  1. Соберите демо-приложение, выполнив в терминале команду: mvn clean install.

  2. Запустите демо-приложение, выполнив в терминале команду: 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));
}