python - 在 Pika/RabbitMQ 的 consumer_callback 中确认消息

标签 python rabbitmq pika

我有一个设置,我希望能够在 consumer_callback 中的几行之后确认 pika 消息,然后继续执行一些时间密集型任务。我已经编写了一些代码来执行此操作,但似乎只有在 consumer_callback 返回后才会发送确认。我将 pika 10 与 SelectConnection 结合使用。

我想知道是否有办法实现这一目标。目前我尝试过的方法是:

  • 在当前回调中做一个常规的ack->只有在回调返回后才会发送ack
  • 通过我专门为此案例创建的不同连接/ channel 进行常规确认 -> 失败并显示“未知交付标签”
  • 尝试通过 SelectConnection 上的 add_timeout 方法潜入回调,然后在 consumer_callback 返回后立即调用 -> 这不知何故打乱了队列通信,并且发生了非常奇怪的事情,所以我假设这不是正确的方式。

非常感谢任何帮助。也许我需要不同的连接类型?

最佳答案

升级到 Pika 0.12.0 并关注 the example in this code, or do something similar : link .

我使用不同的连接类型实现了这个例子,但你明白了。 Pika 的 ioloop 必须在一个线程中运行,而您的时间密集型任务可以在另一个线程中进行。


注意: RabbitMQ 团队监控 the rabbitmq-users mailing list并且只是偶尔在 StackOverflow 上回答问题。

关于python - 在 Pika/RabbitMQ 的 consumer_callback 中确认消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51844852/

相关文章:

python - 如何使用 bash 脚本退出 Django 开发服务器?

plugins - RabbitMQ MQTT 插件无法启动

python - 如何在 RabbitMQ/pika 中实现优先级队列

python - 允许 RabbitMQ 和 Pika 保持连接始终打开

python - 如何将 Pika 与 Qt 集成?

python - 在python中按列连接数组

python - 采用整数 n 并使用字符串格式将 pi 打印为 n 位数字的函数

docker - docker-compose的RabbitMQ无法还原数据

linux - RabbitMQ 应用程序安装 -/usr/bin/env : escript: No such file or directory

python - 使 Python 的 argparse 执行默认操作