Разделы
Veselov CV | vvShop © 2008 – 2022
Контакты
email:
skype:
Вернуться
» » » 11 - Готовим CentOS 7. Установка сервера очередей beanstalkd

11 - Готовим CentOS 7. Установка сервера очередей beanstalkd




Устанавливаем git
yum install git -y
cd /tmp

Клонируем репозиторий
git clone git://github.com/kr/beanstalkd.git
cd beanstalkd
make
cp beanstalkd /usr/bin/beanstalkd
mkdir /var/lib/beanstalkd

Создаем скрипт автозапуска
nano -w /etc/systemd/system/beanstalkd.service

[Unit]
Description=Beanstalkd is a simple, fast work queue

[Service]
User=root
ExecStart=/usr/bin/beanstalkd -b /var/lib/beanstalkd

[Install]
WantedBy=multi-user.target

Запускаем и добавляем в автозагрузку
systemctl start beanstalkd
systemctl enable beanstalkd

Проверяем
systemctl status beanstalkd
ps ax | grep beanstalkd

Удостоверимся на практике что сервер очередей работает

Установим композер
cd /tmp
curl -sS https://getcomposer.org/installer | php70
mv composer.phar /usr/local/bin/composer

Установим pheanstalk
cd /var/www/test.dev
php70 /usr/local/bin/composer require pda/pheanstalk

Создадим клиента
nano -w /var/www/test.dev/producer.php

 'data',
                'msg' => "job 7 payload goes here\n"
        )
);
$pheanstalk->useTube('default')->put($data);
echo 'added';

Создадим воркер который будет зписывать в файлик наши задачи
nano -w /var/www/test.dev/worker.php

watch('default')->reserve();
        if ( $job->getData() ) {
                $data = unserialize($job->getData());
                if ( $data['do'] == 'data' ) {
                        $file = 'data.txt';
                        $current = file_get_contents($file);
                        $current .= $data['msg'];
                        file_put_contents($file, $current);
                        echo 'Log: add data'. PHP_EOL;              
                }
                $pheanstalk->delete($job);           
        }
}

Запустим наш воркер
cd /var/www/test.dev
php70 worker.php

Заходим через наш бразуер на http://test.dev/producer.php и клацаем обновить можно менять job-ы, что бы удостовериться что в очередь попадают разные задачи а не одна и та же, и в нашем файлике data.txt проверяем, что все что передано, отправлено в файлик.

Почему Beanstalkd - это сервер очередей, написаный на С, он маленький и простой. И мониторятся очереди.

Сервер — это сам Beanstalkd, который принимает job-ы от клиента
Продюсер(клиент) — это основное PHP приложение, которое отправляет job-ы на сервер
Воркер — это PHP скрипт, который получает сообщение с сервера задач и выполняет какие-то действия

Что за job? Job (задание) — это любая информация, которую клиент отправляет на сервер очередей. Потом эта же информация передается на обработчик (воркер). К примеру, мы хотим отправить почту на сервер очередей, то создаем для него задачу: отправка почты - адрес получаетля, заголовок письма, тело письма.

Задача 1 - он должен запускаться только из консоли
Задача 2 - должен выключаться если сам воркер изменился ( запускать его будет супервизор (об этом будет позже) )
Задача 3 - собственно обрабатывать наши задачи из очереди
Используется https://github.com/pda/pheanstalk
watch('default')->reserve();
        if ( !isset($job) OR !$job ) {
                // return FALSE;
        } else {
                // распаковываем ранее запакованные данные
                $data = unserialize($job->getData());
                // и тд и тп =)
        }
} 

Beanstalk console - Административная консоль для сервера очередей Beanstalk, написанная на PHP
Возможности
- Общий список серверов в конфиге для всех пользователей
- Глобальный список серверов может быть установлен через переменную окружения BEANSTALK_SERVERS
- Каждый пользователь может добавить свой персональный сервер
- Полный список доступных труб
- Полная статистика тасков в трубах
- Realtime-обновление с подсветкой изменившихся значений
- Вы можете просматривать таски в каждой трубе (ready/delayed/buried)
- Вы можете выполнять операции с тасками в каждой трубе (add/kick/delete)
https://github.com/ptrofimov/beanstalk_console
Оставить комментарий
Вверх