1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        介紹一款 Python 微服務(wù)框架

        共 3646字,需瀏覽 8分鐘

         ·

        2021-10-02 00:06


        作者 |星安果
        來(lái)源 | AirPython

        1. 前言

        考慮到 Python 性能及效率性,Python Web 端一直不溫不火,JAVA 和 Golang 的微服務(wù)生態(tài)一直很繁榮,也被廣泛用于企業(yè)級(jí)應(yīng)用開(kāi)發(fā)當(dāng)中

        本篇文章將介紹一款 Python 微服務(wù)框架:「 Nameko

        2. Nameko 介紹

        Nameko 是一款小巧、簡(jiǎn)潔的、異步通信方式的微服務(wù)架構(gòu)

        它采用 RabbitMQ 消息隊(duì)列作為消息中間件,基于發(fā)布者、訂閱者模式

        其中,消費(fèi)者與生產(chǎn)者基于 RPC 進(jìn)行通訊

        項(xiàng)目地址:https://github.com/nameko/nameko

        3. 實(shí)戰(zhàn)一下

        下面以 Flask 為例聊聊搭建 Python 微服務(wù)的步驟

        3-1  安裝 RabbitMQ 及啟動(dòng)

        這里推薦利用 Docker 安裝 RabbitMQ,以 Centos 為例

        # 1、下載某個(gè)版本的RabbitMQ的鏡像
        # MQ版本號(hào):3.9.5
        docker pull rabbitmq:3.9.5-management

        # 2、查看鏡像
        docker images

        # 3、啟動(dòng)MQ容器
        # p:指定應(yīng)用端口及Web控制臺(tái)端口
        # hostname:主機(jī)名
        # e:環(huán)境變量
        # RABBITMQ_DEFAULT_VHOST:虛擬機(jī)名稱
        # RABBITMQ_DEFAULT_USER:用戶名
        # RABBITMQ_DEFAULT_PASS:密碼
        # 3e83da0dc938:MQ鏡像ID
        docker run -d --name rabbitmq3.9.5 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 3e83da0dc938

        需要注意的是,啟動(dòng) MQ 容器時(shí),利用 -p 指定了兩個(gè)端口

        • 5672

          應(yīng)用訪問(wèn)端口

        • 15672

          控制臺(tái) Web 訪問(wèn)端口號(hào)

        然后,開(kāi)放防火墻的 5672、15672 端口號(hào)

        PS:如果是云服務(wù)器,需要另外配置安全組

        最后,在瀏覽器中通過(guò)下面的連接進(jìn)入到 MQ 后臺(tái) Web 管理頁(yè)面

        地址:http://ip地址:15672

        3-2  安裝依賴包

        使用 pip 命令在虛擬環(huán)境下安裝 nameko、flask 依賴包

        # 安裝依賴包
        # nameko
        pip3 install nameko

        # flask
        pip3 install flask

        3-3  創(chuàng)建服務(wù)生產(chǎn)者 Producer

        自定一個(gè)類,使用 name 屬性定義服務(wù)的名稱為「 generate_service

        然后使用裝飾器「 rpc 」注冊(cè)服務(wù)中具體的方法

        # producer_service.py

        from nameko.rpc import rpc

        class GenerateService(object):
            # 定義微服務(wù)名稱
            name = "generate_service"

            @rpc
            def hello_world(self, msg):
                print('hello,i am been called by customer(消費(fèi)者),返回消息:{}'.format(msg))

                # 返回結(jié)果
                return "Hello World!I Am a msg from producer!"

        3-4  發(fā)布注冊(cè)服務(wù)

        使用 nameko 命令在終端將目標(biāo)文件中的服務(wù)注冊(cè)到 MQ 中

        # 注冊(cè)服務(wù)
        # producer_service:目標(biāo)文件
        # admin:admin:MQ用戶名及密碼
        # ip地址:5672:MQ服務(wù)器ip地址及應(yīng)用端口號(hào)
        # my_vhost:虛擬機(jī)名
        nameko run producer_service --broker amqp://admin:admin@ip地址:5672/my_vhost

        其中,my_vhost 對(duì)應(yīng) MQ 容器啟動(dòng)時(shí)配置的虛擬機(jī)名

        3-5  Flask 定義 API 及消費(fèi)者調(diào)用服務(wù)

        為了演示方便,這里使用 Flask 編寫(xiě)一個(gè)簡(jiǎn)單的 API

        首先,定義 MQ 連接信息

        然后,編寫(xiě)一個(gè) API 接口,請(qǐng)求方式為 GET

        最后,使用 nameko 中的「 ClusterRpcProxy 」拿到消費(fèi)者對(duì)象去調(diào)用服務(wù)中的具體方法

        from flask import Flask
        from nameko.standalone.rpc import ClusterRpcProxy

        app = Flask(__name__)

        # MQ配置
        config_mq = {'AMQP_URI'"amqp://admin:admin@ip地址:5672/my_vhost"}

        @app.route('/hello_world', methods=['GET'])
        def call_service():
            with ClusterRpcProxy(config_mq) as rpc:
                # 消費(fèi)者調(diào)用微服務(wù)(生產(chǎn)者),獲取服務(wù)(生產(chǎn)者)的返回值
                result = rpc.generate_service.hello_world(msg="xag msg")

                # 返回結(jié)果
                return result, 200

        app.run(debug=True)

        3-6  測(cè)試一下

        使用 Postman 調(diào)用上面的 API 接口,就能完成消費(fèi)者調(diào)用生成者服務(wù)中的方法,拿到返回結(jié)果的完整流程

        # 調(diào)用API接口
        http://127.0.0.1:5000/hello_world
        Method:GET

        4. 最后

        上面以 Flask 為例講解了微服務(wù)的搭建的完整流程

        如果是其他 Web 框架( 比如 Django、FastAPI 等 )集成微服務(wù)流程是類似的,只需要修改生成 API 部分的邏輯即可,更多進(jìn)階內(nèi)容大家可以參考官方文檔

        官方文檔:https://nameko.readthedocs.io/en/stable/

        如果你覺(jué)得文章還不錯(cuò),請(qǐng)大家 點(diǎn)贊、分享、留言 下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!

        END



        ??分享、點(diǎn)贊、在看,給個(gè)三連擊唄!
        瀏覽 99
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            男女一进一出粗大楱视频 | www.偷拍自拍在线视频 | 日本潘金莲三级bd高清 | 我和亲女在火车上做爰 | 国内体内she精视频免费 | 短片黄色小说 | 欧日韩性在线 | 国产三级三级三级看三级 | 欧美黑人又大又粗XXXⅩ东京热 | 夜夜骚AV一二三区无码 |