1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/orionis-coyotes

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 00:12 7b88f7c

Койоты

Проект Койоты появился в связи с необходимостью выполнения задач в 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 для завершения процесса, так как это может привести к принудительному завершению процесса и потере данных в очереди задач.

Способы отправки задач

Существует два способа отправки задач для выполнения Койотами:

  1. Непосредственно записать задачу в очередь Redis task:prepare:queue.
  2. Использовать HTTP API.

Непосредственная запись в очередь 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 для управления системой.

Run in Postman

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/orionis-coyotes.git
git@api.gitlife.ru:oschina-mirror/orionis-coyotes.git
oschina-mirror
orionis-coyotes
orionis-coyotes
master