Как @davidnicol упоминает, что вы можете использовать базу данных; хотя недостаток с базой данных делает большую балансировку нагрузки по многим потокам/процессам, это довольно сложно; вы часто получаете один поток, блокирующий головку очереди, делая отправку немного одиночной.
Одним из основных видов использования очереди сообщений является, как правило, получение надежного балансировщика нагрузки - тогда вы можете запустить как можно больше Competing Consumers, так как вы хотите, чтобы все вытягивались из одной очереди, чтобы обеспечить вам массивную масштабируемость.
Если вы отправите маршрут очереди сообщений; то Apache ActiveMQ является самой популярной версией с открытым исходным кодом, и я бы посоветовал начать с этого, получив biggest and most active community (мой личный любимый показатель для выбора между аналогичными проектами с открытым исходным кодом).
Существуют различные способы: implement priority queues with ActiveMQ - основной компромисс - вы можете справиться с задержкой Resequencer pattern introduces или просто использовать селекторы и различные пулы процессов/потоков для разных диапазонов приоритетов - это лучшее решение с низкой задержкой.
В то время как реализация селектора не является реализацией самой чистой очереди приоритетов - на практике она лучше работает, поскольку она позволяет избежать оживления сообщений с более высоким приоритетом; плюс он избегает сообщений с низким приоритетом, которые занимают много времени, чтобы обрабатывать ваши процессоры.
Beanstalkd - это демон, написанный на C. Он имеет клиентские библиотеки для нескольких языков. Это далеко не единственное решение для рубинов. – 2008-11-05 23:57:57