Как клиент Ruby AMQP эффективно блокирует ожидание сообщений? - PullRequest
0 голосов
/ 19 июля 2011

Допустим, вы являетесь клиентом Ruby для службы очередей, например, RabbitMQ.Как реализовано ожидание сообщений, чтобы вы не выполняли активный опрос, потребляя ресурсы?Это следует непосредственно из вопроса Блокировка Ruby для значения - если клиент AMQP может сделать это эффективно, можно сделать что-то подобное с чтением Memcached ... И вообще, для RabbitMQ и такого использованиядолжны убедиться, что умное ожидание!

1 Ответ

1 голос
/ 20 июля 2011

В мире Ruby это в основном делается с помощью асинхронного событийно-управляемого ввода-вывода .Если вы посмотрите на AMPQ-клиент в GitHub , у него есть поддержка 2 из этих библиотек, EventMachine и Cool.IO.

Это опрос, но цикл ожидания завершенс помощью ядра вашей операционной системы.Например, EventMachine будет использовать что-то вроде epoll при работе в Linux.

Когда запускается нужное событие, вызывается ваша функция обратного вызова.Если вам нужно очень глубокое объяснение того, как работает EventMachine, вы можете посмотреть здесь .

Клиент AMPQ все еще связывается через сокет с сервером очереди, но API откладывают цикл ожиданияи уведомление ядра ОС.

...