我正在尝试使用鼠兔和扭曲从兔子队列中消费:
我唯一的输入是这个示例。它涵盖了用例 1。那么用例 2 呢?
basic_consume
不是以新消息准备好时“通知”的方式实现的吗?为什么开始循环调用是我的“工作”?看来轮询是违反扭曲的事件循环模式的,不是吗?
当使用twisted发出http请求时,它会发送请求并在返回后继续执行(通过延迟)。为什么这在 RabbitMQ/pika 中不起作用?
这是我期望它如何工作:
如何使用单条消息,例如
basic_get
?我是否需要开始循环调用,并在收到消息后停止它?
您问了几个问题,所以我会尽力回答所有问题。我是 Pika 的维护者之一,但对 Twisted 不像其他连接适配器那么熟悉。
basic_consume 不是以新消息准备好时“通知”的方式实现的吗?为什么开始循环调用是我的“工作”?看来轮询是违反扭曲的事件循环模式的,不是吗?
LoopingCall
文档指出:
重复调用函数。如果 f 返回 deferred,则在 deferred 触发之前不会进行重新调度。
示例代码使用
@defer.inlineCallbacks
和yield
语句返回延迟函数。因此,LoopingCall
将不会重复调用该函数,它只会在延迟触发后安排新的调用。
这是我期望它如何工作...从队列消耗(除非队列中有消息,否则不会立即触发,每次队列中有新消息时都会触发,我忽略了 qos现在。)
这正是示例代码的工作原理。
如何使用单条消息,例如
?我是否需要开始循环调用,并在收到消息后停止它?basic_get
如果将预取(QoS)设置为
1
,那么 RabbitMQ 将仅向消费者发送一条消息,并且在第一个消息被 basic_ack
确认之前不会发送下一条消息。