我有一个设置,我希望能够在 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/