Python 同步AMQP发布

Python 同步AMQP发布,python,rabbitmq,amqp,pika,Python,Rabbitmq,Amqp,Pika,我知道有很多库在python中实现AMQP支持。不过,我需要的是一个库,它将允许我以同步方式进行AMQP发布,因为它将从WSGI应用程序中使用,因此通常的异步回调驱动的队列代理交互方式将有点不合适 系统的其他部分用于AMQP支持,但它是异步的,即使存在某种“阻塞”连接,我也不想使用它 当然,如果所有其他操作都失败,那么可以为每个WSGI进程维护一个Pika事件循环。另一个问题是,我在当前稳定版本的Pika中发现了几个讨厌的(IMO)bug,我宁愿使用其他东西 重申: 我需要执行basic.pu

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

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

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

重申:

  • 我需要执行basic.publish(带有“确认”支持!以便我知道消息何时未实际发布)
  • 以同步的方式
  • 到rabbitmq(显然,“纯”AMQP也可以工作)
  • 来自python WSGI应用程序

我的理解是,您可以使用RabbitMQ的RPC进行同步调用。由于您已经有了pika,您应该不需要花太多的精力就可以采用它。

我建议您检查一下所使用的底层库。Kombu和芹菜通常都可以轻松地与Django和Flask(基于Werkzeug)集成,因此将其与WSGI应用程序集成不会有任何问题

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

有一节叫做: 同步编程风格,无并发

看起来您需要的是一种RPC样式的调用。您可以在以下位置找到一个很好的同步示例:

您对应用程序的WSGI部分有多大的控制权。您是在WSGI之上使用框架还是自己调用start_响应函数?@jfocht应用程序使用Werkzeug提供的请求/响应类。顺便说一句,是的,我自己正在调用start_response.WSGI环境不是以同步方式进行异步操作的原因。顺便说一句,我也在一条类似的船上——正在寻找一种方法来执行同步RPC调用。我发现的唯一解决方案是使用Pika的轮询机制,基本上是在connection.u打开时检查消息。这两个例子都提供了同步发布,但是在回复时会回调。最好有一个不需要回调机制的方法,而是阻塞等待响应的方法。你检查了puka吗?我在这里找到了一个讨论:[