私は Beanstalk + Pheanstalk の中級者です。Beanstalk を使用してコア部分 (バックグラウンド プロセス) を開発しています。間違いなく優れたツールですが、私は 1 つの状況で立ち往生しています。Yii フレームワークを使用して豆の木を使用しています。
たとえば、A (Tube - A-Jobs) と B (Tube - B-Jobs) の 2 つのジョブがあり、両方とも別のチューブとワーカーの下にあるとします。B は A に依存しています。B が A の前にワーカーによって最初にフェッチされ、その上でプロセスを開始する可能性があります。その場合、A が実行されるまで B を数秒 (120 秒) 遅らせる必要があります。
私の知る限り、仕事を遅らせる直接的な方法はありません。このためには、ジョブ B を削除し、遅延時間で同じキューに戻す必要があります。ここで間違っている場合は修正してください。
現在の状況では、pheanstalk はジョブ ID とジョブ データのみを提供するため、その場合、実際のチューブ名を取得できません。以下に私のコードを貼り付けます。
$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 チューブで見ることができるので、この仕事を遅らせて同じチューブの下に置きたい場合. ジョブのチューブ名を見つけるにはどうすればよいですか?
ありがとう...