我使用 Rabbitmq 和 Bunny gem 来存储我们想要发送给客户的消息。我有一个基于 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"
...