Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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
Python 如何在flask microservices中侦听消息队列_Python_Flask_Microservices_Pika - Fatal编程技术网

Python 如何在flask microservices中侦听消息队列

Python 如何在flask microservices中侦听消息队列,python,flask,microservices,pika,Python,Flask,Microservices,Pika,这是我的flask微服务场景 活动服务器公开用于购票的api。 A-server将在支付完成后向rabbitmq推送带有订单id(否)的消息。 和C-serverinsertorder\u no到mysql,因为它收到了特定的消息 我的解决方案是启动一个pika线程,它似乎可以工作 # content of /user/src/app.py def create_app(config=None): app = Flask(__name__) t = Thread(target=

这是我的flask微服务场景

活动服务器
公开用于购票的api。
A-server
将在支付完成后向rabbitmq推送带有
订单id(否)
的消息。
C-server
insert
order\u no
到mysql,因为它收到了特定的消息

我的解决方案是启动一个pika线程,它似乎可以工作

# content of /user/src/app.py
def create_app(config=None):
    app = Flask(__name__)
    t = Thread(target=start_message_consumer)
    t.daemon = True
    t.start()

    return app

def start_message_consumer():
    credential = pika.credentials.PlainCredentials(xxxxx)
    connection = pika.BlockingConnection(xxx, credentials=credential))
    channel = connection.channel()

    channel.queue_declare(queue='order')

    def callback(ch, method, properties, body):
        ....Insert statement

    channel.basic_consume(callback, queue='order', no_ack=True)
    channel.start_consuming()
我需要锁还是有更好的方法(比如烧瓶扩展)来实现这一点


你有没有想出一个好的实施方案。。。我也在为同样的事情挣扎。@sptremblay是的,只要启动一个新的python进程来处理消息,如果需要与flask交互,只需从主导入应用程序导入flask实例。