Gearman в связке nginx+php-fpm (версия PHP 5.3) на Debian

Если Вы решили разработать свой web-сервис, то Вам просто не обойтись без сервера очередей. Среди всех доступных серверов есть один, достаточно интересный, экземпляр – Gearman. Из основных достоинств этого сервера можно выделить: OpenSource, скорость работы и простота использования.

Единственная проблема, которая у Вас может возникнуть, это проблема с его установкой. Устанавливается просто, но есть небольшие нюансы.

Я устанавливал его на Debian и поэтому приведу подробную инструкцию здесь, чтобы не забыть план действий.

Исходные данные

Будем считать, что web-сервер у нас уже установлен. В системе используется sudo, хоть и его нет их коробки в Debian.

Установка Gearman в Debian

  1. Ставим Gearman:
    sudo apt-get install gearman-job-server
  2. Устанавливаем клиента для php-fpm. Хотелось бы сразу пояснить, что версия этого клиента зависит от используемой версии PHP: если версия ниже PHP < 5.3, то используйте 1.1.2, если используется PHP = 5.3, то 1.0.3.
    sudo apt-get install php-pear make libgearman-dev
    sudo pecl install gearman-1.0.3
    echo 'extension=gearman.so' > sudo /etc/php5/fpm/conf.d/gearman.ini
  3. Перезапускаем php5 и Gearman:
    service gearman-job-server restart
    service php5-fpm restart

Проверка работоспособности

Для того, чтобы проверить нашу работу:

php --info | grep "gearman support"

Правильный ответ, который говорит нам о успешности наших действий:

gearman support => enabled

Как использовать?

Идеологию Gearman объяснять, думаю, излишне, поэтому сразу к делу. В примерах будем, как по хрестоматии, отправлять электронные письма.

Клиент

Пример клиента client.php:

<?php
    $mail = array(
                  'to' => 'ваше_имя@gmail.com',
                  'subject' => 'Привет',
                  'body' => 'Это тестовое сообщение'
                  );
    # Подключаемся к серверу Gearman
    $client = new GearmanClient();
    $client->addServer('127.0.0.1', '4730');
    # Шлем сообщение
    $client->doBackground('sendmail', json_encode($mail));

Воркер

Пример воркера worker.php:

<?php
    $worker = new GearmanWorker();
    $worker->addServer('127.0.0.1', 4730);
    $worker->addFunction('sendmail', 'send_mail');
    while (1) {
        $worker->work();
        if ($worker->returnCode() != GEARMAN_SUCCESS) break;
    }
    function send_mail($job) {
        $workload = $job->workload();
        $data = json_decode($workload, true);
        mail($data['to'], $data['subject'], $data['body']);
    }

Запуск воркера в работу

Запускаем воркер командой:

php worker.php &

Команда должна исполняться из той же директории, в которой лежит воркер.

Мониторинг

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

(echo status) | netcat 127.0.0.1 4730

Вывод будет примерно таким:

sendmail	0	0	0	1

где

  1. столбец – названия функций для которых есть либо задачи, либо есть воркеры
  2. столбец – общее количество задач для функции
  3. столбец – количество задач в обработке
  4. столбец – количество запущенных воркеров для данной функции

Комментарии:

Имя
e-mail
Сайт
Текст комментария: