Pheanstalk を PHP ジョブの基本クラスにラップしようとしています。リザーブと遅延機能を備えたリザーブをテストしていますが、最初のインスタンスがジョブを解放したり、TTR がタイムアウトしたりすることなく、基本クラスの 2 番目のインスタンスからジョブを予約できることがわかりました。これはまさにジョブ キューが防ぐべきものだと思っていたので、これは予想外です。最初のプットと最初のリザーブの beanstalkd コマンドとタイムスタンプを以下に示します。最後に stats-job リクエストも行います。
01:40:15: Sending command: use QueuedCoreEvent
01:40:15: Got response: USING QueuedCoreEvent
01:40:15: Sending command: put 1024 0 300 233
a:4:{s:9:"eventName";s:21:"ReQueueJob_eawu7xr9bi";s:6:"params";a:2:{s:12:"InstanceName";s:21:"ReQueueJob_eawu7xr9bi";s:17:"aValueToIncrement";i:123456;}s:9:"behaviors";a:1:{i:0;s:22:"BehMCoreEventTestDummy";}s:12:"failureCount";i:0;}
01:40:15: Got response: INSERTED 10
01:40:15: Sending command: watch QueuedCoreEvent
01:40:15: Got response: WATCHING 2
01:40:15: Sending command: ignore default
01:40:15: Got response: WATCHING 1
01:40:15: Sending command: reserve-with-timeout 0
01:40:15: Got response: RESERVED 10 233
01:40:15: Data: a:4:{s:9:"eventName";s:21:"ReQueueJob_eawu7xr9bi";s:6:"params";a:2:{s:12:"InstanceName";s:21:"ReQueueJob_eawu7xr9bi";s:17:"aValueToIncrement";i:123456;}s:9:"behaviors";a:1:{i:0;s:22:"BehMCoreEventTestDummy";}s:12:"failureCount";i:0;}
01:40:15: Sending command: stats-job 10
01:40:15: Got response: OK 162
01:40:15: Data: ---
id: 10
tube: QueuedCoreEvent
state: reserved
pri: 1024
age: 0
delay: 0
ttr: 300
time-left: 299
file: 0
reserves: 1
timeouts: 0
releases: 0
buries: 0
kicks: 0
ここまでは順調ですね。次に、基本クラスの 2 番目のインスタンスから別の予約を行い、続いて別の統計ジョブ リクエストを行います。タイム スタンプが 1 秒以内であり、設定した 300 秒の TTR にはほど遠いことに注意してください。また、この 2 番目の stats-job の出力では、タイムアウトが 0 でリリースが 0 のこのジョブの予約が 2 つあることに注意してください。
01:40:15: Sending command: watch QueuedCoreEvent
01:40:15: Got response: WATCHING 2
01:40:15: Sending command: ignore default
01:40:15: Got response: WATCHING 1
01:40:15: Sending command: reserve-with-timeout 0
01:40:15: Got response: RESERVED 10 233
01:40:15: Data: a:4:{s:9:"eventName";s:21:"ReQueueJob_eawu7xr9bi";s:6:"params";a:2:{s:12:"InstanceName";s:21:"ReQueueJob_eawu7xr9bi";s:17:"aValueToIncrement";i:123456;}s:9:"behaviors";a:1:{i:0;s:22:"BehMCoreEventTestDummy";}s:12:"failureCount";i:0;}
01:40:15: Sending command: stats-job 10
01:40:15: Got response: OK 162
01:40:15: Data: ---
id: 10
tube: QueuedCoreEvent
state: reserved
pri: 1024
age: 0
delay: 0
ttr: 300
time-left: 299
file: 0
reserves: 2
timeouts: 0
releases: 0
buries: 0
kicks: 0
私が間違っているかもしれないことについて誰にもアイデアがありますか? 一度に 1 人のワーカーだけがジョブにアクセスできるようにキューに伝えるために何かしなければならないことはありますか? beanstalkd とのセッションを終了すると思われるキューからジョブを取得するとすぐに、pheanstalk インスタンスで「設定解除」を行っています。これにより、Beanstalkd がワーカーが停止したと判断し、タイムアウトなしでジョブを自動的に解放する可能性がありますか? ワーカーの状態を判断するために、beanstalkd がセッション状態にどの程度依存しているかはわかりません。私は、セッションを問題なく開いたり閉じたりできると思っていました。また、Beanstalkd がジョブ操作を結び付けるために気にかけているのはそのジョブ ID だけでしたが、それは私の側では愚かだったかもしれません...これは、ジョブ キューへの私の最初の進出です.
ありがとう!