Wie @davidnicol erwähnt, können Sie eine Datenbank verwenden; obwohl der Nachteil mit einer Datenbank einen großen Lastausgleich über viele Threads/Prozesse hinweg macht, ist ein bisschen schwer; Sie erhalten oft einen Thread, der den Kopf der Warteschlange sperrt, wodurch der Versand ein wenig single threaded wird.
Eine der Hauptaufgaben einer Nachrichtenwarteschlange besteht in der Regel darin, einen zuverlässigen Load Balancer zu erhalten. Sie können dann so viele Competing Consumers ausführen, wie Sie möchten.
Wenn Sie die Route der Nachrichtenwarteschlange gehen; dann ist Apache ActiveMQ die populärste Open-Source-Implementierung und ich würde empfehlen, damit zu beginnen, da es die biggest and most active community (meine persönliche Lieblingsmetrik für die Wahl zwischen ähnlichen Open-Source-Projekten) hat.
Es gibt verschiedene Möglichkeiten, um implement priority queues with ActiveMQ - der wichtigste Kompromiss ist, können Sie mit der Latenz umgehen die Resequencer pattern introduces oder nur Selektoren und andere Prozess/Thread-Pools der Verbraucher für verschiedene Bereiche von Prioritäten verwenden, ist eine bessere, niedrige Latenz Lösung.
Während die Selektorimplementierung nicht die reinste Warteschlangenimplementierung ist, tendiert sie in der Praxis besser zu arbeiten, da sie vermeidet, auf Nachrichten mit höherer Priorität zu warten. Außerdem werden Nachrichten mit niedriger Priorität vermieden, die eine lange Verarbeitungszeit für die Prozessoren erfordern.
Beanstalkd ist ein in C geschriebener Daemon. Er verfügt über Client-Bibliotheken für eine Reihe von Sprachen. Es ist weit entfernt von einer reinen Ruby-Lösung. –