【问题标题】:How do I sending messages from Passenger and Bunny to RabbitMQ?如何从Passenger 和Bunny 向RabbitMQ 发送消息?
【发布时间】: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 那样发生碰撞。

标签: ruby rabbitmq passenger


【解决方案1】:

我发现了问题。这是一个乘客问题,因为我将客户端实例绑定到类并希望在多个请求上使用相同的连接。它工作得很少,但Passenger 不喜欢这种解决方案。

【讨论】:

  • 只是路过记住你标记为答案;)
  • 我也遇到了同样的问题。您发现了问题,但您的解决方案是什么?
  • 我将连接实例存储在一个类变量中,但在Passenger 中这不是一个安全的解决方案。所以最后我在每个网络请求中重新连接到 RabbitMQ。它不是太高效但很稳定。
  • Passenger 有一个#starting_worker_process 钩子,它允许您在生成过程中重置 Bunny 连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多