Ruby AMQP客户端如何有效地阻塞消息等待



假设你是一个队列服务的Ruby客户端,例如RabbitMQ。等待消息是如何实现的,这样您就不会进行消耗资源的活动轮询了?这直接来自Ruby阻塞值的问题——如果AMQP客户端可以有效地做到这一点,人们可以用Memcached读取做类似的事情……总的来说,对于RabbitMQ和这样的使用,我们必须让自己确信等待是明智的!

在Ruby世界中,这主要是通过使用异步事件驱动的I/O来完成的。如果你看一下GitHub中的ampq客户端,它支持两个库,EventMachine和Cool.IO。

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

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

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

最新更新