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

Сервис Пакетная обработка задач используется для следующих сценариев:

  • совершение операций над Очередями и Задачами:

    • создание, обновление, удаление очередей;

    • создание Задач в Очередях.

  • изменение параметра количества одновременно запускаемых Задач в Очереди;

  • автоматический асинхронный запуск Задач в порядке Очереди;

  • запуск задач в виде вызовов API по протоколам REST и JSON-RPC 2.0.

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

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

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

Для начала работы с сервисом выполните следующие шаги:

  1. Создайте Очередь.

  2. Создайте Задачу для Очереди.

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

Шаг 1. Создание Очереди#

  1. На странице Очереди задач нажмите кнопку Создать очередь.

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

  • в поле Имя очереди введите — Queue;

  • в поле Максимально допустимое количество одновременно запущенных задач введите — 1.

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

Шаг 2. Создание Задачи для Очереди#

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

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

  3. В открывшемся модальном окне заполните:

  • в поле Очередь из выпадающего списка выберите значение — Queue;

  • в поле URL адрес введите — https://httpstat.us/200?sleep=200;

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

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

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

  1. Нажмите кнопку Обновить , чтобы актуализировать список Задач и их статус.

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

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

Для начала работы с сервисом выполните следующие шаги:

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

  2. Создайте Очередь.

  3. Создайте Задачу для Очереди.

  4. Создайте вторую Задачу для Очереди.

  5. Проверьте статус выполнения первой созданной Задачи в Очереди.

  6. Проверьте статус выполнения второй созданной Задачи в Очереди.

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

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

  • файл batch-tasks-quick-start.zip (располагается в дистрибутиве по пути: documentation/documents/developer-guide/resources);

  • запущенный сервис Пакетной обработки задач.

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

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

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

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

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

Пример application.yml:

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

  2. Запустите демо-приложение, выполнив в терминале команду: java -jar target/tasks-0.0.1-SNAPSHOT.jar.

Шаг 2. Создание Очереди#

Для создания Очереди введите в поисковую строку браузера URL: http://localhost:8080/queue/create/New_Queue и нажмите Enter для отправки запроса.

В браузере отображается JSON-ответ с информацией о созданной Очереди:

{"jsonrpc":"2.0", "id":"1", "result": {"name":"New_Queue", "description":"", "maxRunningTasks":5, "state":"OPEN", "createTime":"2021-02-16T06:31:08.768Z", "updateTime":"2021-02-16T06:31:08.768Z", "retryPolicy": {"maxAttempts":1, "startRetryDuration":"1s", "increasePercentage":0, "maxRetryDuration":"1s"},"label":null}}

Шаг 3. Создание Задачи для Очереди#

Для создания Задачи для Очереди введите в поисковую строку браузера URL: http://localhost:8080/task/create/New_Queue и нажмите Enter для отправки запроса.

В браузере отображается JSON-ответ с информацией о созданной Задаче для указанной Очереди:

{"jsonrpc":"2.0","id":"1","result":{"name":"1","queue":"New_Queue","description":"","httpTarget":{"url":"http://localhost:8080/httpTarget","method":"POST","body":"testParam","headers":{}},"createTime":"2021-02-16T06:31:49.718Z","updateTime":"2021-02-16T06:31:50.756Z","scheduleTime":null,"state":"READY","firstAttempt":null,"lastAttempt":null,"retryState":{"numAttempts":0,"nextAttemptTime":"2021-02-16T06:31:49.718Z","intervalSeconds":1},"dependsOn":null}}

Шаг 4. Создание второй Задачи для Очереди#

Создайте вторую Задачу для Очереди, повторив предыдущую операцию: в поисковую строку браузера введите http://localhost:8080/task/create/New_Queue и нажмите Enter для отправки запроса.

В браузере отображается JSON-ответ с информацией о созданной Задаче для указанной Очереди:

{"jsonrpc":"2.0","id":"1","result":{"name":"2","queue":"New_Queue","description":"","httpTarget":{"url":"http://localhost:8080/httpTarget","method":"POST","body":"testParam","headers":{}},"createTime":"2021-02-16T06:31:58.855Z","updateTime":"2021-02-16T06:31:58.855Z","scheduleTime":null,"state":"READY","firstAttempt":null,"lastAttempt":null,"retryState":{"numAttempts":0,"nextAttemptTime":"2021-02-16T06:31:58.855Z","intervalSeconds":1},"dependsOn":null}}

Шаг 5. Проверка статуса выполнения первой созданной Задачи в Очереди#

Для проверки статуса выполнения первой созданной Задачи в Очереди введите в поисковую строку браузера URL: http://localhost:8080/task/get/1 и нажмите Enter для отправки запроса.

В браузере отображается JSON-ответ с информацией о последней созданной Задаче для указанной Очереди:

{"jsonrpc":"2.0","id":"1","result":{"name":"1","queue":"New_Queue","description":"","httpTarget":{"url":"http://localhost:8080/httpTarget","method":"POST","body":"testParam","headers":{}},"createTime":"2021-02-16T06:31:49.718Z","updateTime":"2021-02-16T06:31:50.756Z","scheduleTime":null,"state":"DONE","firstAttempt":{"scheduleTime":"2021-02-16T06:31:49.718Z","dispatchTime":"2021-02-16T06:31:50.630Z","responseTime":"2021-02-16T06:31:50.756Z","responseStatus":{"code":200,"message":"Input parameter: testParam"}},"lastAttempt":{"scheduleTime":"2021-02-16T06:31:49.718Z","dispatchTime":"2021-02-16T06:31:50.630Z","responseTime":"2021-02-16T06:31:50.756Z","responseStatus":{"code":200,"message":"Input parameter: testParam"}},"retryState":{"numAttempts":1,"nextAttemptTime":"2021-02-16T06:31:49.718Z","intervalSeconds":1},"dependsOn":null}}

Шаг 6. Проверка статуса выполнения второй созданной Задачи в Очереди#

Для проверки статуса выполнения второй созданной Задачи в Очереди. Для этого в поисковую строку браузера введите URL: http://localhost:8080/task/getLast/New_Queue и нажмите Enter для отправки запроса.

В браузере будет отображен JSON-ответ с информацией о последней созданной Задаче для указанной Очереди:

{"jsonrpc":"2.0","id":"1","result":[{"name":"2","queue":"New_Queue","description":"","httpTarget":{"url":"http://localhost:8080/httpTarget","method":"POST","body":"testParam","headers":{}},"createTime":"2021-02-16T06:31:58.855Z","updateTime":"2021-02-16T06:31:59.554Z","scheduleTime":null,"state":"DONE","firstAttempt":{"scheduleTime":"2021-02-16T06:31:58.855Z","dispatchTime":"2021-02-16T06:31:59.544Z","responseTime":"2021-02-16T06:31:59.554Z","responseStatus":{"code":200,"message":"Input parameter: testParam"}},"lastAttempt":{"scheduleTime":"2021-02-16T06:31:58.855Z","dispatchTime":"2021-02-16T06:31:59.544Z","responseTime":"2021-02-16T06:31:59.554Z","responseStatus":{"code":200,"message":"Input parameter: testParam"}},"retryState":{"numAttempts":1,"nextAttemptTime":"2021-02-16T06:31:58.855Z","intervalSeconds":1},"dependsOn":null}]}

Состав демо-приложения#

Демо-приложение Пакетной обработки задач состоит из следующих основных компонентов:

  • application.yml — настройки адресов для демо-приложения Пакетной обработки задач;

  • HttpService — HTTP-client для вызова JSON-RPC API;

  • Controller — REST-контроллер с примерами вызовов API Пакетной обработки задач.

Controller#

Контроллер включает в себя:

  • HttpTarget — сущность клиентского сервиса, который вызывается Пакетной обработкой задач на выполнение;

  • метод createQueue — пример вызова API создания Очереди;

  • метод getQueue — пример вызова API получения Очереди;

  • метод createTask — пример вызова API создания Задачи;

  • метод getTask — пример вызова API получения Задачи;

  • метод getLastTask — пример вызова API получения последней Задачи.

Объект HttpTarget#

Объект HttpTarget — это объект запуска вычислений, оформленный в виде запроса по протоколу HTTP(S). В данном демо-приложении httpTarget рассматривается на примере некоторого клиентского сервиса, обращение к которому происходит из создаваемых клиентом Задач.

@RequestMapping("/httpTarget")
public String httpTarget(@RequestBody String param) {
    // here you implement your business logic
    return "Input parameter: " + param;
}

Note

По умолчанию в демо-приложении httpTarget возвращает ответ 200 ОК. Убедитесь, что при изменении возвращаемого значения, при вызове Заданием httpTarget клиента возвращаемое значение изменится.

Метод createQueue#

Метод createQueue содержит пример программной реализации создания Очереди в Пакетной обработке задач (при помощи вызова соответствующего API сервиса). При обращении к URL /queue/create/{queueName} создается Очередь с наименованием {queueName}.

@RequestMapping("/queue/create/{queueName}")
public String createQueue(@PathVariable String queueName) {
    JSONObject params = new JSONObject();
    params.put("name", queueName);
    params.put("description", "");
    params.put("maxRunningTasks", "5");

    return service.post("queues", buildQuery("create", params));
}

Note

Здесь и далее service — компонент HttpService для отправки запросов по HTTP-протоколу.

Очередь будет содержать следующий набор параметров:

  • name — имя создаваемой Очереди;

  • description — описание создаваемой Очереди;

  • maxRunningTasks — максимально допустимое количество одновременно запущенных Задач в данной Очереди. Диапазон допустимых значений: от 1 до 200. В примере по умолчанию maxRunningTasks = 5.

Метод getQueue#

Метод getQueue содержит пример программной реализации получения атрибутов Очереди в Пакетной обработке задач (при помощи вызова соответствующего API сервиса). При обращении к URL /queue/get/{queueName} будет получен объект Очереди с наименованием {queueName}.

@RequestMapping("/queue/get/{queueName}")
public String getQueue(@PathVariable String queueName) {
    JSONObject params = new JSONObject();
    params.put("name", queueName);

    return service.post("queues", buildQuery("get", params));
}
Метод createTask#

Метод createTask содержит пример программной реализации создания Задачи в Пакетной обработке задач (при помощи вызова соответствующего API сервиса). При обращении к URL /task/create/{queueName} будет создана Задача для Очереди с наименованием {queueName}.

@RequestMapping("/task/create/{queueName}")
public String createTask(@PathVariable String queueName) {
    String httpTargetParams = "testParam"; // here you can specify task input parameters

    JSONObject httpTarget = new JSONObject();
    httpTarget.put("url", httpTargetUrl + "/httpTarget");
    httpTarget.put("method", "POST");
    httpTarget.put("headers", new JSONObject());
    httpTarget.put("body", httpTargetParams);

    JSONObject params = new JSONObject();
    params.put("queue", queueName);
    params.put("description", "");
    params.put("httpTarget", httpTarget);

    return service.post("tasks", buildQuery("create", params));
}

Задача будет содержать следующий набор параметров:

  • name — имя Очереди, для которой создается Задача;

  • description — описание создаваемой Задачи;

  • httpTarget — объект, содержащий:

    • url — адрес вызываемого клиентского сервиса (httpTarget), по умолчанию: {httpTargetUrl}/httpTarget/,

    • method — по умолчанию используется метод POST,

    • headers — список HTTP-заголовков,

    • body — тело запроса в кодировке UTF-8.

Метод getTask#

Метод getTask содержит пример программной реализации получения Задачи в Пакетной обработке задач (при помощи вызова соответствующего API сервиса). При обращении к URL /task/get/{taskName} будет получен объект Задачи с наименованием {taskName}.

@RequestMapping("/task/get/{taskName}")
public String getTask(@PathVariable String taskName) {
    JSONObject params = new JSONObject();
    params.put("name", taskName);

    return service.post("tasks", buildQuery("get", params));
}
Метод getLastTask#

Метод getLastTask содержит пример программной реализации получения последней Задачи в Очереди в Пакетной обработке задач (при помощи вызова соответствующего API сервиса). При обращении к URL /task/getLast/{queueName} будет получен объект последней Задачи в Очереди с наименованием {queueName}.

@RequestMapping("/task/getLast/{queueName}")
public String getLastTask(@PathVariable String queueName) {
        JSONObject params = new JSONObject();
        params.put("queue", queueName);
        params.put("fromName", "");
        params.put("limit", -1);

        return service.post("tasks", buildQuery("list", params));
        }