Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq 从队列消费时为什么需要循环调用?_Rabbitmq_Twisted_Pika_Python Pika - Fatal编程技术网

Rabbitmq 从队列消费时为什么需要循环调用?

Rabbitmq 从队列消费时为什么需要循环调用?,rabbitmq,twisted,pika,python-pika,Rabbitmq,Twisted,Pika,Python Pika,我正在尝试使用pika和twisted从兔子队列中消费: 持续(新消息->消费) 一次(新消息->消费一次,在我说之前不要再消费) 我唯一的意见就是这个。它涵盖用例1。用例2呢 basic\u consume的实现方式不是在新消息准备就绪时“通知”吗?为什么启动循环呼叫是我的“工作”?在twisted中,轮询似乎与事件循环模式相反,不是吗 当使用twisted发出http请求时,它会发送请求并在返回后继续执行(通过延迟)。为什么这在RabbitMQ/pika中不起作用 以下是我期望它如何工作:

我正在尝试使用pika和twisted从兔子队列中消费:

  • 持续(新消息->消费)
  • 一次(新消息->消费一次,在我说之前不要再消费)
  • 我唯一的意见就是这个。它涵盖用例1。用例2呢

    basic\u consume
    的实现方式不是在新消息准备就绪时“通知”吗?为什么启动循环呼叫是我的“工作”?在twisted中,轮询似乎与事件循环模式相反,不是吗

    当使用twisted发出http请求时,它会发送请求并在返回后继续执行(通过延迟)。为什么这在RabbitMQ/pika中不起作用

    以下是我期望它如何工作:

  • 订阅队列
  • 从队列消费(除非队列中有消息,否则不会立即触发,每次队列中有新消息时都会触发,我现在忽略qos。)

  • 如何使用单个消息,例如
    basic\u get
    ?我是否需要启动循环调用,并在收到消息后停止它?

    RabbitMQ团队监视并有时只回答有关StackOverflow的问题


    你问了几个问题,所以我会尽力回答。我是Pika的维护人员之一,但对Twisted的熟悉程度不如其他连接适配器

    basic_consume的实现方式不是在新消息准备就绪时“通知”吗?为什么启动循环呼叫是我的“工作”?在twisted中,轮询似乎与事件循环模式相反,不是吗

    声明如下:

    反复调用函数。如果f返回一个延迟,则在延迟触发之前不会进行重新调度

    使用
    @defer.inlineCallbacks
    yield
    语句返回延迟函数。因此,
    LoopingCall
    重复调用该函数,它只会在延迟触发后安排新的调用

    下面是我期望它如何工作。。。从队列消费(除非队列中有消息,否则不会立即触发,每次队列中有新消息时都会触发,我现在忽略qos。)

    这正是示例代码的工作方式

    如何使用单个消息,例如
    basic\u get
    ?我是否需要启动循环呼叫,并在收到消息后立即停止

    如果将预回迁(QoS)设置为
    1
    ,则RabbitMQ将只向使用者发送一条消息,并且在第一条消息被
    基本确认之前不会发送下一条消息