Быстрый старт#
Сервис Пакетная обработка задач используется для следующих сценариев:
совершение операций над Очередями и Задачами:
создание, обновление, удаление очередей;
создание Задач в Очередях.
изменение параметра количества одновременно запускаемых Задач в Очереди;
автоматический асинхронный запуск Задач в порядке Очереди;
запуск задач в виде вызовов API по протоколам REST и JSON-RPC 2.0.
Рассмотрим данные сценарии с точки зрения ролей:
Использование приложения оператором с помощью пользовательского интерфейса UI#
Batch Tasks является подключаемым сервисом, поэтому после авторизации пользователю сразу доступна главная страница сервиса Очереди задач.
Для начала работы с сервисом выполните следующие шаги:
Создайте Очередь.
Создайте Задачу для Очереди.
Проверьте статус выполнения Задачи.
Шаг 1. Создание Очереди#
На странице Очереди задач нажмите кнопку Создать очередь.
В открывшемся модальном окне заполните поля:
в поле Имя очереди введите — Queue;
в поле Максимально допустимое количество одновременно запущенных задач введите — 1.
Нажмите кнопку Сохранить.
Шаг 2. Создание Задачи для Очереди#
Через боковое меню перейдите на страницу Задачи.
Нажмите кнопку Создать задачу.
В открывшемся модальном окне заполните:
в поле Очередь из выпадающего списка выберите значение — Queue;
в поле URL адрес введите —
https://httpstat.us/200?sleep=200;в поле Метод из выпадающего списка выберите метод — POST.
Нажмите кнопку Сохранить.
Шаг 3. Проверка статуса выполнения Задачи#
Нажмите кнопку Обновить
, чтобы актуализировать список Задач и их статус.Проверьте статус выполнения Задачи, нажав на Задачу. В развернувшейся вложенной форме Задачи на вкладке Информация проверьте описание последней попытки запуска и результата запуска вычислений.
Использование сервиса прикладным разработчиком вызовом методов API#
Для начала работы с сервисом выполните следующие шаги:
Выполните локальное развертывание демо-приложения Пакетная обработка задач.
Создайте Очередь.
Создайте Задачу для Очереди.
Создайте вторую Задачу для Очереди.
Проверьте статус выполнения первой созданной Задачи в Очереди.
Проверьте статус выполнения второй созданной Задачи в Очереди.
Шаг 1. Развертывание демо-приложения Пакетная обработка задач#
Для взаимодействия с демо-приложением необходимо иметь:
файл
batch-tasks-quick-start.zip(располагается в дистрибутиве по пути: documentation/documents/developer-guide/resources);запущенный сервис Пакетной обработки задач.
Подробнее о составе демо-приложения Пакетная обработка задач приведено в подразделе «Состав демо-приложения».
Распакуйте
batch-tasks-quick-start.zipи откройте каталог с помощью среды разработки (IDE).Настройте файл
application.yml, содержащий следующие параметры:
url— адрес, на котором запущен сервис Пакетной обработки задач.httpTarget— адрес, на котором будет запущено клиентское приложение и куда будет приходить вызов Задач.
Пример application.yml:
batch:
tasks:
url: http://localhost:8081
httpTarget: http://localhost:8080
Соберите демо-приложение, выполнив в терминале команду:
mvn clean install.Запустите демо-приложение, выполнив в терминале команду:
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));
}