2011-07-19 65 views
0

假设您是排队服务的Ruby客户端,例如RabbitMQ的。如何实现等待消息,以便不进行活动轮询,消耗资源?这直接来自于问题Ruby blocking on a value - 如果一个AMQP客户端可以高效地完成它,可以使用类似于Memcached的方式进行读取......一般来说,对于RabbitMQ以及这样的用法,我们必须让自己满意,等待很聪明!Ruby AMQP客户端如何有效地阻止等待消息?

回答

1

在Ruby世界中,这主要通过使用asynchronous event driven I/O来完成。 如果你看看AMPQ-client in GitHub,它支持2个这样的库,EventMachine和Cool.IO.

轮询有效,但等待循环是在操作系统内核的帮助下完成的。例如,如果在Linux上运行,EventMachine会使用类似epoll的东西。

当期望的事件被触发时,你的回调函数被调用。 如果您想深入了解EventMachine的工作原理,可以看看here

AMPQ客户端仍然通过套接字与队列服务器进行通信,但API会将等待循环和通知推迟到OS内核。

+0

伟大的指针,谢谢! – Alexy