Я занимаюсь промежуточным звеном в Beanstalk + Pheanstalk. Я разрабатываю свою основную часть (фоновый процесс) с помощью Beanstalk. Это отличный инструмент, который, без сомнения, я застрял в одной ситуации. Я использую beanstalk, используя структуру Yii.Beanstalk + Pheanstalk Delay Existing Job
Предположим, у меня есть две работы A (Tube - A-Jobs) и B (Tube - B-Jobs), и оба находятся под разными трубами и рабочими. B зависит от A. Возможно, что B сначала получит работника до A и начнет процесс на нем. В этом случае мне нужно, чтобы B задерживался на несколько секунд (120 секунд) до тех пор, пока не исполнится A.
Насколько мне известно, нет прямого способа сделать задержку работы. Для этого вам нужно удалить задание B и вернуть обратно в ту же очередь с задержкой. Поправьте меня, если я ошибаюсь.
Теперь ситуация такова, что я не могу получить фактическое имя трубки в этом случае, потому что pheanstalk предоставляет только идентификатор задания и данные задания. Я вставив вам мой код ниже,
$pheanstalkA = Yii::app()->beanstalk->getClient($client);
$pheanstalkA->watch('A-tube');
$pheanstalkB = Yii::app()->beanstalk->getClient($client);
$pheanstalkB->watch('B-tube');
Теперь, если я получил любую работу, используя резервную функцию,
$jobB = $pheanstalkB->reserve();
Это даст вам результат, как следовать, и мы можем видеть, что Beanstalk не предоставив название трубки, из которой оно взяло эту работу.
Pheanstalk_Job Object
(
[_id:Pheanstalk_Job:private] => 2
[_data:Pheanstalk_Job:private] => Job Data ....
)
Как мы знаем, что один рабочий может смотреть в N трубке (ы), так что если я хочу, чтобы отложить эту работу и хочу поставить под одной пробиркой. Как мы можем найти название трубки?
Благодаря ...
Спасибо Алистер .. Отличная помощь !! –