<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 微服務(wù)框架 Nameko 初體驗(yàn)

          共 3941字,需瀏覽 8分鐘

           ·

          2021-09-28 11:27

          △點(diǎn)擊上方“Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書

          Nameko即滑姑,學(xué)名:光帽鱗傘

          1. 前言

          大家好,我是貓哥!

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

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

          2. Nameko 介紹

          Nameko 是一款小巧、簡潔的、異步通信方式的微服務(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)用訪問端口

          • 15672

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

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

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

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

          地址: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 編寫一個(gè)簡單的 API

          首先,定義 MQ 連接信息

          然后,編寫一個(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  測試一下

          使用 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

          Python貓技術(shù)交流群開放啦!群里既有國內(nèi)一二線大廠在職員工,也有國內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥,也有中小學(xué)剛剛?cè)腴T的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請(qǐng)?jiān)诠?hào)內(nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠勿擾?。?/span>~


          還不過癮?試試它們




          如何評(píng)價(jià)說 Python 是最快的語言?

          提升自動(dòng)化技巧的 10 篇 Ansible 文章

          微軟官方上線Python教程

          Python 工匠:讓函數(shù)返回結(jié)果的技巧

          教你用 Python 實(shí)現(xiàn) HashMap 數(shù)據(jù)結(jié)構(gòu)

          Python實(shí)現(xiàn):詳解LRU緩存淘汰算法


          如果你覺得本文有幫助
          歡迎轉(zhuǎn)發(fā)分享,點(diǎn)擊關(guān)注Python貓
          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  18紧激韩| 国产视频福利导航 | 人人妻人人爽人人DVD | 国产 欧美一 | 色色色欧美 |