これは、すべてのワーカーがBRPOP
する追加の「ディスパッチ」キューを備えたRedisリストを使用して実現できます。 彼らの仕事のために。ディスパッチキュー内の各ジョブは元のキューIDでタグ付けされ、ワーカーがジョブを完了すると、この元のキューに移動してRPOPLPUSH
を実行します。 次のジョブを他のワーカーが利用できるようにするために、ディスパッチキューに追加します。したがって、ディスパッチキューには最大 num_queuesがあります。 要素。
処理する必要があることの1つは、ソースキューが空の場合のディスパッチキューの初期設定です。これは、最初に設定された各キューの「空」フラグに対してパブリッシャーによって行われるチェックであり、ディスパッチする元のキューに何も残っていないときにワーカーによって設定される場合もあります。このフラグが設定されている場合、発行者はLPUSH
を実行できます。 最初のジョブを直接ディスパッチキューに入れます。