Spec-Zone.ru › Phalcon 3

Очереди

Задачи, такие как обработка видео, изменение размера изображений или отправка электронных писем, не подходят для выполнения онлайн или в режиме реального времени, так как это может замедлить время загрузки страниц и негативно повлиять на пользовательский опыт.

Лучшим решением здесь является реализация фоновых задач. Веб-приложение помещает задачи в очередь, которая будет обрабатываться отдельно.

Хотя вы можете найти более сложные расширения PHP для работы с очередями в ваших приложениях, таких как RabbitMQ; Phalcon предоставляет клиент для Beanstalk, сервера очереди задач, вдохновленного Memcache. Он прост, легок и полностью специализирован для очередей задач.

Внимание

Некоторые из возвращаемых значений методов очереди требуют установки модуля Yaml. Для получения дополнительной информации, обратитесь к http://php.net/manual/book.yaml.php. Для PHP < 7 приемлема версия Yaml 1.3.0. Для PHP >= 7 вам потребуется использовать Yaml >= 2.0.0.

Помещение задач в очередь

После подключения к Beanstalk вы можете вставить столько задач, сколько потребуется. Вы можете определить структуру сообщения в соответствии с потребностями приложения:

use Phalcon\Queue\Beanstalk;

// Connect to the queue
$queue = new Beanstalk(
    [
        "host" => "192.168.0.21",
        "port" => "11300",
    ]
);

// Insert the job in the queue
$queue->put(
    [
        "processVideo" => 4871,
    ]
);

Доступные параметры подключения:

Параметр Описание Значение по умолчанию
host IP адрес сервера beanstalk 127.0.0.1
port Порт подключения 11300

В приведенном выше примере мы сохранили сообщение, которое позволит фоновой задаче обработать видео. Сообщение сохраняется в очереди немедленно и не имеет определенного срока действия.

Дополнительные параметры, такие как время выполнения, приоритет и задержка, могут быть переданы во втором параметре:

// Insert the job in the queue with options
$queue->put(
    [
        "processVideo" => 4871,
    ],
    [
        "priority" => 250,
        "delay"    => 10,
        "ttr"      => 3600,
    ]
);

Доступные параметры:

Параметр Описание
priority Целое число < 2**32. Задачи с меньшими значениями приоритета будут запланированы перед задачами с большими приоритетами. Наивысший приоритет — 0; наименьший — 4 294 967 295.
delay Целое число секунд ожидания перед помещением задачи в очередь готовности. Задача будет находиться в состоянии «отложенной» в течение этого времени.
ttr Время выполнения — целое число секунд, позволяющее рабочему процессу выполнить эту задачу. Это время исчисляется с момента, когда рабочий процесс зарезервировал эту задачу.

Каждая задача, помещенная в очередь, возвращает «идентификатор задачи», который вы можете использовать для отслеживания статуса задачи:

$jobId = $queue->put(
    [
        "processVideo" => 4871,
    ]
);

Извлечение сообщений

После помещения задачи в очередь, эти сообщения могут быть обработаны фоновым рабочим процессом, у которого будет достаточно времени для выполнения задачи:

while (($job = $queue->peekReady()) !== false) {
    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

Задачи должны быть удалены из очереди, чтобы избежать двойной обработки. Если реализовано несколько фоновых рабочих процессов, задачи должны быть «зарезервированы», чтобы другие рабочие процессы не перерабатывали их, пока другие рабочие процессы их не зарезервируют:

while (($job = $queue->reserve()) !== false) {
    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

Наш клиент реализует базовый набор функций, предоставляемых Beanstalkd, но достаточно, чтобы позволить вам создавать приложения, использующие очереди.

© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/queue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API