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

OSCHINA-MIRROR/orionis-coyotes

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Койоты

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

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

Введение

Появление Coyotes связано с тем, что при использовании Laravel и его планировщика задач, из-за ограничений PHP (без установки расширений, связанных с потоками), невозможно выполнять задачи параллельно. Если время выполнения задачи слишком большое, это может повлиять на выполнение других запланированных задач. Расширить Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/orionis-coyotes.git
git@gitlife.ru:oschina-mirror/orionis-coyotes.git
oschina-mirror
orionis-coyotes
orionis-coyotes
master