在Flask视图中监听RabbitMQ队列

时间:2014-04-02 15:13:15

标签: python rabbitmq pika

我有一个视图,我向工人发送一条消息(请求ID)。然后我需要监听结果队列并仅在我收到响应消息时返回响应(响应必须包含此消息)。我该怎么做呢?

这是我的代码:

def get(self):
    ruid = rand_ruid()
    # add msg to q1
    write_ch = current_app.amqp_conn.channel()
    write_ch.queue_declare(queue='q1', durable=True)
    msg = mkmsg(ruid=ruid)
    write_ch.basic_publish(exchange='', routing_key='q1', body=msg)
    write_ch.close()

    # then wait results from qbus
    listen_ch = current_app.amqp_conn.channel()
    listen_ch.exchange_declare(exchange='exbus', type='direct')
    listen_ch.queue_declare(queue='bus')

    listen_ch.queue_bind(exchange='exbus', queue='bus', routing_key=ruid)
    while 1:
        for method, properties, body in listen_ch.consume('bus'):
            if method and body:
                listen_ch.basis_ack(delivery_tag=method.delivery_tag)
                listen_ch.close()
                return make_response(body)

更新 我的方法是我的问题不正确。我想在程序的同步部分(烧瓶视图)中执行异步操作(等待队列中的结果)。

0 个答案:

没有答案