В мире Ruby это в основном делается с помощью асинхронного событийно-управляемого ввода-вывода .Если вы посмотрите на AMPQ-клиент в GitHub , у него есть поддержка 2 из этих библиотек, EventMachine и Cool.IO.
Это опрос, но цикл ожидания завершенс помощью ядра вашей операционной системы.Например, EventMachine будет использовать что-то вроде epoll при работе в Linux.
Когда запускается нужное событие, вызывается ваша функция обратного вызова.Если вам нужно очень глубокое объяснение того, как работает EventMachine, вы можете посмотреть здесь .
Клиент AMPQ все еще связывается через сокет с сервером очереди, но API откладывают цикл ожиданияи уведомление ядра ОС.