Spec-Zone.ru › Phalcon 2

Очереди

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

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

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

Добавление задач в очередь

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

//Connect to the queue
$queue = new Phalcon\Queue\Beanstalk(array(
    'host' => '192.168.0.21'
));

//Insert the job in the queue
$queue->put(array('processVideo' => 4871));

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

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

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

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

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

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

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

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

$jobId = $queue->put(array('processVideo' => 4871));

Получение сообщений

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

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

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

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

while ($queue->peekReady() !== false) {

    $job = $queue->reserve();

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

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

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

Spec-Zone.ru

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