Sie können dies erreichen, indem Sie Redis-Listen mit einer zusätzlichen "Dispatch"-Warteschlange verwenden, die alle Worker BRPOP
auf für ihre Arbeit. Jeder Job in der Dispatch-Warteschlange wird mit der ursprünglichen Warteschlangen-ID gekennzeichnet, und wenn der Arbeiter den Job abgeschlossen hat, geht er zu dieser ursprünglichen Warteschlange und führt RPOPLPUSH
aus in die Versandwarteschlange, um den nächsten Auftrag für jeden anderen Arbeiter verfügbar zu machen. Die Versandwarteschlange hat daher maximal num_queues Elemente.
Eine Sache, die Sie erledigen müssen, ist die anfängliche Auffüllung der Dispatch-Warteschlange, wenn die Quellwarteschlange leer ist. Dies könnte einfach eine Prüfung sein, die vom Herausgeber gegen ein „leeres“ Flag für jede Warteschlange durchgeführt wird, das anfangs gesetzt ist, und auch vom Arbeiter gesetzt wird, wenn in der ursprünglichen Warteschlange nichts mehr zum Versenden vorhanden ist. Wenn dieses Flag gesetzt ist, kann der Herausgeber einfach LPUSH
den ersten Job direkt in die Versandwarteschlange.