【发布时间】:2013-09-17 14:50:16
【问题描述】:
我使用带有 Bunny gem 的 Rabbitmq 来存储我们想要发送给客户的消息。我有一个基于 Padrino 的 Web 服务,可以将消息推送到队列和许多使用消息的工作人员。
当我使用 Thin 作为服务器时它工作正常,但是如果我在 Apache/Passenger 中启动 Web 服务,我会从 Bunny 收到“执行过期”消息。我读到Passenger 中的EventMachine 存在问题,但Bunny 不使用EventMachine,因此可能是不同的问题,尽管行为非常相似。
异常是“执行过期”,所以它在等待一个永远不会到达的消息,所以我猜可能有一个回调问题,虽然代码很简单。 Bunny 为 RabbitMQ 打开一个通道,推送消息并关闭通道,因此没有轮询,也没有调用任何回调。
服务中的代码是:
client = Bunny.new
client.start
client.create_channel # => throws exception, "execution expired"
...
【问题讨论】:
-
Bunny 可能不会使用 EventMachine,但它肯定会使用线程,这可能会像 EventMachine 那样发生碰撞。