关于python:硬肝一次-Python-微服务是一种什么体验

25次阅读

共计 2251 个字符,预计需要花费 6 分钟才能阅读完成。

1. 前言
思考到 Python 性能及效率性,Python Web 端始终不温不火,JAVA 和 Golang 的微服务生态始终很凋敝,也被宽泛用于企业级利用开发当中

本篇文章将介绍一款 Python 微服务框架:「Nameko」

2. Nameko 介绍
Nameko 是一款玲珑、简洁的、异步通信形式的微服务架构

它采纳 RabbitMQ 音讯队列作为消息中间件,基于发布者、订阅者模式

其中,消费者与生产者基于 RPC 进行通信

3. 实战一下
上面以 Flask 为例聊聊搭建 Python 微服务的步骤

3-1 装置 RabbitMQ 及启动

这里举荐利用 Docker 装置 RabbitMQ,以 Centos 为例

# 1、下载某个版本的 RabbitMQ 的镜像
# MQ 版本号:3.9.5
docker pull rabbitmq:3.9.5-management

# 2、查看镜像
docker images

# 3、启动 MQ 容器
# p:指定利用端口及 Web 控制台端口
# hostname:主机名
# e:环境变量
# RABBITMQ_DEFAULT_VHOST:虚拟机名称
# 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

须要留神的是,启动 MQ 容器时,利用 -p 指定了两个端口

  • 5672

利用拜访端口

  • 15672

控制台 Web 拜访端口号
而后,凋谢防火墙的 5672、15672 端口号
PS:如果是云服务器,须要另外配置平安组
最初,在浏览器中通过上面的连贯进入到 MQ 后盾 Web 治理页面

3-2 装置依赖包

应用 pip 命令在虚拟环境下装置 nameko、flask 依赖包

# 装置依赖包
# nameko
pip3 install nameko

# flask
pip3 install flask

3-3 创立服务生产者 Producer

自定一个类,应用 name 属性定义服务的名称为「generate_service」

而后应用装璜器「rpc」注册服务中具体的办法

# producer_service.py

from nameko.rpc import rpc

class GenerateService(object):
    # 定义微服务名称
    name = "generate_service"

    @rpc
    def hello_world(self, msg):
        print('hello,i am been called by customer(消费者), 返回音讯:{}'.format(msg))

        # 返回后果
        return "Hello World!I Am a msg from producer!"

3-4 公布注册服务

应用 nameko 命令在终端将指标文件中的服务注册到 MQ 中

# 注册服务
# producer_service:指标文件
# admin:admin:MQ 用户名及明码
# ip 地址:5672:MQ 服务器 ip 地址及利用端口号
# my_vhost:虚拟机名
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」拿到消费者对象去调用服务中的具体方法

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:
        # 消费者调用微服务(生产者),获取服务(生产者)的返回值
        result = rpc.generate_service.hello_world(msg="xag msg")

        # 返回后果
        return result, 200

app.run(debug=True)

3-6 测试一下

应用 Postman 调用下面的 API 接口,就能实现消费者调用生成者服务中的办法,拿到返回后果的残缺流程

# 调用 API 接口
http://127.0.0.1:5000/hello_world
Method:GET

4. 最初
下面以 Flask 为例解说了微服务的搭建的残缺流程

如果是其余 Web 框架(比方 Django、FastAPI 等)集成微服务流程是相似的,只须要批改生成 API 局部的逻辑即可,更多进阶内容大家能够参考官网文档

最近整顿了几百 G 的 Python 学习材料,蕴含新手入门电子书、教程、源码等等,收费分享给大家!想要的返回“Python 编程学习圈”,发送“J”即可收费取得

正文完
 0