Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie kann ich diese einzelne verteilte Warteschlange für Parallelität in einer beliebigen MQ-Plattform implementieren?

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.