日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
硬肝一次 Python 微服務是一種什么體驗?

本文轉載自微信公眾號「AirPython」,作者星安果。轉載本文請聯(lián)系AirPython公眾號。

為桓仁等地區(qū)用戶提供了全套網頁設計制作服務,及桓仁網站建設行業(yè)解決方案。主營業(yè)務為成都網站制作、網站設計、外貿網站建設、桓仁網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

1. 前言

大家好,我是安果!

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

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

2. Nameko 介紹

Nameko 是一款小巧、簡潔的、異步通信方式的微服務架構

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

其中,消費者與生產者基于 RPC 進行通訊

項目地址:https://github.com/nameko/nameko

3. 實戰(zhàn)一下

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

3-1 安裝 RabbitMQ 及啟動

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

 
 
 
  1. # 1、下載某個版本的RabbitMQ的鏡像 
  2. # MQ版本號:3.9.5 
  3. docker pull rabbitmq:3.9.5-management 
  4.  
  5. # 2、查看鏡像 
  6. docker images 
  7.  
  8. # 3、啟動MQ容器 
  9. # p:指定應用端口及Web控制臺端口 
  10. # hostname:主機名 
  11. # e:環(huán)境變量 
  12. # RABBITMQ_DEFAULT_VHOST:虛擬機名稱 
  13. # RABBITMQ_DEFAULT_USER:用戶名 
  14. # RABBITMQ_DEFAULT_PASS:密碼 
  15. # 3e83da0dc938:MQ鏡像ID 
  16. 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 

需要注意的是,啟動 MQ 容器時,利用 -p 指定了兩個端口

  • 5672

應用訪問端口

  • 15672

控制臺 Web 訪問端口號

然后,開放防火墻的 5672、15672 端口號

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

最后,在瀏覽器中通過下面的連接進入到 MQ 后臺 Web 管理頁面

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

3-2 安裝依賴包

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

 
 
 
  1. # 安裝依賴包 
  2. # nameko 
  3. pip3 install nameko 
  4.  
  5. # flask 
  6. pip3 install flask 

3-3 創(chuàng)建服務生產者 Producer

自定一個類,使用 name 屬性定義服務的名稱為「 generate_service 」

然后使用裝飾器「 rpc 」注冊服務中具體的方法

 
 
 
  1. # producer_service.py 
  2.  
  3. from nameko.rpc import rpc 
  4.  
  5. class GenerateService(object): 
  6.     # 定義微服務名稱 
  7.     name = "generate_service" 
  8.  
  9.     @rpc 
  10.     def hello_world(self, msg): 
  11.         print('hello,i am been called by customer(消費者),返回消息:{}'.format(msg)) 
  12.  
  13.         # 返回結果 
  14.         return "Hello World!I Am a msg from producer!" 

3-4 發(fā)布注冊服務

使用 nameko 命令在終端將目標文件中的服務注冊到 MQ 中

 
 
 
  1. # 注冊服務 
  2. # producer_service:目標文件 
  3. # admin:admin:MQ用戶名及密碼 
  4. # ip地址:5672:MQ服務器ip地址及應用端口號 
  5. # my_vhost:虛擬機名 
  6. nameko run producer_service --broker amqp://admin:admin@ip地址:5672/my_vhost 

其中,my_vhost 對應 MQ 容器啟動時配置的虛擬機名

3-5 Flask 定義 API 及消費者調用服務

為了演示方便,這里使用 Flask 編寫一個簡單的 API

首先,定義 MQ 連接信息

然后,編寫一個 API 接口,請求方式為 GET

最后,使用 nameko 中的「 ClusterRpcProxy 」拿到消費者對象去調用服務中的具體方法

 
 
 
  1. from flask import Flask 
  2. from nameko.standalone.rpc import ClusterRpcProxy 
  3.  
  4. app = Flask(__name__) 
  5.  
  6. # MQ配置 
  7. config_mq = {'AMQP_URI': "amqp://admin:admin@ip地址:5672/my_vhost"} 
  8.  
  9. @app.route('/hello_world', methods=['GET']) 
  10. def call_service(): 
  11.     with ClusterRpcProxy(config_mq) as rpc: 
  12.         # 消費者調用微服務(生產者),獲取服務(生產者)的返回值 
  13.         result = rpc.generate_service.hello_world(msg="xag msg") 
  14.  
  15.         # 返回結果 
  16.         return result, 200 
  17.  
  18. app.run(debug=True) 

3-6 測試一下

使用 Postman 調用上面的 API 接口,就能完成消費者調用生成者服務中的方法,拿到返回結果的完整流程

 
 
 
  1. # 調用API接口 
  2. http://127.0.0.1:5000/hello_world 
  3. Method:GET 

4. 最后

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

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

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


文章名稱:硬肝一次 Python 微服務是一種什么體驗?
文章分享:http://www.dlmjj.cn/article/djjhsdi.html