Койоты
Проект Койоты появился в связи с необходимостью выполнения задач в Laravel, где из-за ограничений PHP (отсутствие установки потоков и расширений) невозможно реализовать параллельное выполнение задач. В отличие от других тяжеловесных систем очередей, Койоты предоставляют поддержку только для выполнения командных строк, что позволяет разработчикам избежать изучения API для работы с очередями задач и упрощает разработку программ для обработки очередей задач. Для запуска параллельного выполнения достаточно предоставить исполняемый файл или скрипт.
Параметры команды:
channel-default: строка по умолчанию для имени канала, используемого для очереди сообщений (по умолчанию «default»).
colorful-tty: включает цветной вывод на консоль.
concurrent: int — количество параллельных потоков выполнения (по умолчанию 5).
host: строка — адрес подключения к Redis, обязательно указать порт (опущено, использовать redis-host) (по умолчанию «127.0.0.1:6379»).
http-addr: строка — адрес мониторинга HTTP-сервиса + порт (по умолчанию «127.0.0.1:60001»).
password: строка — пароль для подключения к Redis (опущено, использовать redis-password).
pidfile: строка — путь к файлу PID (по умолчанию /tmp/coyotes.pid).
redis-db: int — номер базы данных Redis по умолчанию (от 0 до 15).
redis-host: строка — адрес подключения к Redis, необходимо указать порт (по умолчанию «127.0.0.1:6379»).
redis-password: строка — пароль для подключения к Redis.
task-mode: режим задачи — включать ли режим задачи, по умолчанию включён, при отключении задачи не выполняются (по умолчанию true).
Установка и развёртывание
Для компиляции установки требуется Go1.7+. Выполните следующую команду для компиляции:
make build-mac
После выполнения этой команды будет создан исполняемый файл для текущей платформы (./bin/coyotes). Например, после компиляции на Mac система может использоваться только на Mac, а после компиляции в Linux система может работать только в Linux. Если вы хотите создать исполняемый файл Linux для использования на Mac, вам нужно сначала настроить кросс-компиляцию на локальном компьютере, а затем выполнить следующую команду для создания версии Linux:
make build-linux
Созданный исполняемый файл (в каталоге bin) можно скопировать в каталог /usr/local/bin для использования.
mv ./bin/coyotes /usr/local/bin/coyotes
В каталоге проекта есть файл конфигурации supervisor.conf, который можно напрямую использовать в supervisor. Coyotes требует, чтобы служба Redis была доступна перед запуском.
/usr/local/bin/coyotes -redis-host 127.0.0.1:6379 -password REDIS доступ к паролю
Если вам нужно завершить процесс, отправьте сигнал USR2 процессу, чтобы обеспечить плавное завершение работы.
kill -USR2 $(pgrep coyotes)
Не рекомендуется использовать kill -9 для завершения процесса, так как это может привести к принудительному завершению процесса и потере данных в очереди задач.
Способы отправки задач
Существует два способа отправки задач для выполнения Койотами:
Непосредственная запись в очередь Redis
Задачи записываются в виде JSON-кодированных данных в очередь task:prepare:queue в Redis.
$redis->lpush('task:prepare:queue', json_encode([
'task' => $taskName,
'chan' => $channel,
'ts' => time(),
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE))
После записи задачи в task:prepare:queue Койоты будут автоматически извлекать задачи из очереди и распределять их по соответствующим каналам для обработки рабочими процессами.
Использование HTTP API
Запрос:
POST /channels/default HTTP/1.1
Accept: */*
Host: localhost:60001
content-type: multipart/form-data; boundary=--------------------------019175029883341751119913
content-length: 179
----------------------------019175029883341751119913
Content-Disposition: form-data; name="task"
ping -c 40 baidu.com
----------------------------019175029883341751119913--
Ответ:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Mon, 10 Apr 2017 13:05:56 GMT
Content-Length: 92
{"status_code":200,"message":"ok","data":{"task_name":"ping -c 40 baidu.com","result":true}}
HTTP API
Койоты предоставляют RESTful API для управления системой.
GET /channels — запрос состояния всех каналов.
Параметр | Описание |
---|---|
Без параметров | Нет |
Ответ |
{
"status_code": 200,
"message": "ok",
"data": {
"biz": {
"tasks": [],
"count": 0
},
"cron": {
"tasks": [],
"count": 0
},
"default": {
"tasks": [
{
"task_name": "ping -c 40 baidu.com",
"channel": "default",
"status": "running"
}
],
"count": 1
},
"test": {
"tasks": [],
"count": 0
}
}
}
Состояние задачи:
Статус | Описание |
---|---|
expired | Не ожидается (необходимо подтвердить) |
queued | Ожидание выполнения |
running | Выполнение задачи |
GET /channels/{channel_name} — запрос статуса конкретного канала.
Без параметров.
Ответ:
{
"status_code": 200,
"message": "ok",
"data": {
"tasks": [],
"count": 0
}
}
POST /channels/{channel_name}/tasks — отправка задачи в очередь.
Параметры:
Параметр | Описание |
---|---|
task | Имя задачи, используется как команда для выполнения, если не указан параметр command. |
command | Команда для выполнения, рекомендуется использовать этот способ. Если не указано, используется task в качестве команды для выполнения. |
args | Параметры команды, действительны только при указании параметра command, могут быть указаны несколько параметров, которые используются в качестве параметров команды по порядку. |
delay | Задержка выполнения в секундах, по умолчанию 0. |
Пример запроса:
POST /channels/default/tasks
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )