在 Pika / RabbitMQ 的 consumer_callback 中确认消息
Acknowledging a message inside the consumer_callback in Pika / RabbitMQ
我有一个设置,我希望能够在 consumer_callback 中的几行之后确认 pika 消息,然后继续执行一些更耗时的任务。我已经编写了一些代码来执行此操作,但似乎只有在 consumer_callback returns 之后才会发送确认。我将 pika 10 与 SelectConnection 一起使用。
我想知道是否有办法实现这一目标。目前我尝试过的方法是:
- 在当前回调中做一个常规的ack -> ack只在回调后发出returns
- 通过我专门为此案例创建的不同连接/通道进行常规确认 -> 失败并显示 "unknown delivery tag"
- 试图通过 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 并且有时只在 Whosebug 上回答问题。
我有一个设置,我希望能够在 consumer_callback 中的几行之后确认 pika 消息,然后继续执行一些更耗时的任务。我已经编写了一些代码来执行此操作,但似乎只有在 consumer_callback returns 之后才会发送确认。我将 pika 10 与 SelectConnection 一起使用。
我想知道是否有办法实现这一目标。目前我尝试过的方法是:
- 在当前回调中做一个常规的ack -> ack只在回调后发出returns
- 通过我专门为此案例创建的不同连接/通道进行常规确认 -> 失败并显示 "unknown delivery tag"
- 试图通过 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 并且有时只在 Whosebug 上回答问题。