我是 Beanstalk + Pheanstalk 的中级。我正在使用 Beanstalk 开发我的核心部分(后台进程)。毫无疑问,这是一款出色的工具,但我陷入了一种困境。我正在使用使用 Yii 框架的 beanstalk。
假设,我有两个工作 A(Tube - A-Jobs)和 B(Tube - B-Jobs),两者都在不同的管和工人下。B 依赖于 A。B 可能会在 A 之前由工作人员首先获取并开始处理它。在这种情况下,我需要 B 延迟几秒钟(120 秒),直到 A 执行。
据我所知,没有任何直接的方法可以拖延工作。为此,您需要删除作业 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 个管中观看,所以如果我想推迟这项工作并想放在同一管下。我们如何找到工作的管名?
谢谢...