我使用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"
...
答案 0 :(得分:1)
我发现了问题。这是一个乘客问题,因为我将客户端实例绑定到类,并希望在多个请求上使用相同的连接。它工作很薄,但Passenger不喜欢这个解决方案。