【问题标题】:Synchronous AMQP publish同步 AMQP 发布
【发布时间】:2012-07-01 08:08:58
【问题描述】:

我知道有许多库在 python 中实现 AMQP 支持。不过,我需要的是一个库,它允许我以同步方式进行 AMQP 发布,因为它将在 WSGI 应用程序中使用,因此与队列代理交互的通常异步回调驱动方式将是有点不合适。

系统的其他部分使用 pika 来支持 AMQP,但它是异步的,即使那里存在某种“阻塞”连接,我也不想使用它。

当然,如果所有其他方法都失败了,则可以为每个 WSGI 进程维护一个 Pika 事件循环。另一个问题是我在当前稳定版本的 Pika 中发现了一些令人讨厌的 (IMO) 错误,我宁愿使用其他东西。

重申:

  • 我需要做 basic.publish(带有“确认”支持!这样我才能知道消息何时没有真正发布)
  • 以同步方式
  • 到 rabbitmq(显然,“纯”AMQP 也可以工作)
  • 来自 python WSGI 应用程序

【问题讨论】:

  • 您对应用程序的 WSGI 部分有多少控制权。您是在 WSGI 之上使用框架还是自己调用 start_response 函数?
  • @jfocht 该应用程序使用由 Werkzeug 提供的请求/响应类。顺便说一句,是的,我自己正在调用 start_response。
  • WSGI 环境不是以同步方式制作异步事物的原因
  • 顺便说一句,我在一条类似的船上 - 寻找一种方法来进行同步 RPC 调用。我找到的唯一解决方案是使用 Pika 的轮询机制,基本上是在 connection.is_open 时检查消息。还在寻找。

标签: python rabbitmq amqp pika


【解决方案1】:

我的理解是可以使用 RabbitMQ 的 RPC 进行同步调用。由于您已经有了鼠兔,所以您应该不需要太多努力来采用它。

【讨论】:

    【解决方案2】:

    我建议您查看Kombu,它是Celery 使用的底层库。 Kombu 和 Celery 都可以很容易地与 Django 和 Flask(基于 Werkzeug)集成,因此将它与 WSGI 应用程序集成应该不会有任何问题。

    【讨论】:

      【解决方案3】:

      您是否在 pika 文档站点测试了示例代码?

      有一段叫做: 同步编程风格,无并发 http://pika.github.com/communicating.html#synchronous-programming-style-no-concurrency

      看起来你想要的是一种 RPC 风格的调用。您可以在以下位置找到一个很好的同步示例: http://www.rabbitmq.com/tutorials/tutorial-six-python.html

      【讨论】:

      猜你喜欢
      • 2012-03-12
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 2017-03-26
      相关资源
      最近更新 更多