Beanstalkd — несколько рабочих, обращающихся к одной и той же очереди

Я хотел бы использовать Beanstalkd в процессе развертывания. Идея аналогична той, которую использует IGN (https://github.com/ign/brood). В любой момент я могу захотеть запустить двух клиентов для загрузки последнего кода и перезапуска Apache. Возможно ли, чтобы несколько рабочих процессов (по одному на каждом клиенте) обрабатывали одну и ту же очередь? В качестве обходного пути я мог бы создать очередь для каждого клиента.


person sdot257    schedule 28.09.2013    source источник


Ответы (1)


Определенная очередь для каждого клиента, используемая для команд для этого клиента. Пусть все они слушают в своей собственной очереди и отправляют простое сообщение «RESTART» стольким клиентам, сколько требуется.

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

  1. удалить сообщение «RESTART» (иначе в следующий раз будет такое же сообщение)
  2. exit(90); сценарий

Возвращаемое значение принимается сценарием Bash, и действие выполняется.

#!/bin/bash

# runBeanstalkd-worker.sh

# a shell script that keeps looping until an exit code is given
# if it does an exit(0), restart after a second - or if it's a declared error
# if we've restarted in a planned fashion, we don't bother with any pause
# and for one particular code, exit the script entirely.
# The numbers 97, 98, 99 must match what is returned from the PHP script

nice php -q -f ./cli-beanstalk-worker.php -- $@
ERR=$?

## Possibilities
# 90    - restart apache
# 97    - planned pause/restart
# 98    - planned restart
# 99    - planned stop, exit.
# 0     - unplanned restart (as returned by "exit;")
#        - Anything else is also unplanned paused/restart

# 90    - restart apache
if [ $ERR -eq 90 ]
then
   service apache restart
   sleep 5;
   exec $0 $@;
fi

if [ $ERR -eq 97 ]
then
   # a planned pause, then restart
   echo "97: PLANNED_PAUSE - wait 1";
   sleep 1;
   exec $0 $@;
fi

####   other actions, like planned-restart, or shutdown

# unplanned exit, pause, and restart
echo "unplanned restart: err:" $ERR;
echo "sleeping for 1 sec"
sleep 1

exec $0 $@
person Alister Bulman    schedule 28.09.2013