硬肝一次 Python 微服务是一种怎样体验?
发布时间:2021-11-05 13:21:26 所属栏目:语言 来源:互联网
导读:1. 前言 大家好,我是安果! 考虑到 Python 性能及效率性,Python Web 端一直不温不火,JAVA 和 Golang 的微服务生态一直很繁荣,也被广泛用于企业级应用开发当中 本篇文章将介绍一款 Python 微服务框架:「 Nameko 」 2. Nameko 介绍 Nameko 是一款小巧、简
1. 前言 大家好,我是安果! 考虑到 Python 性能及效率性,Python Web 端一直不温不火,JAVA 和 Golang 的微服务生态一直很繁荣,也被广泛用于企业级应用开发当中 本篇文章将介绍一款 Python 微服务框架:「 Nameko 」 2. Nameko 介绍 Nameko 是一款小巧、简洁的、异步通信方式的微服务架构 它采用 RabbitMQ 消息队列作为消息中间件,基于发布者、订阅者模式 其中,消费者与生产者基于 RPC 进行通讯 项目地址:https://github.com/nameko/nameko 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 管理页面 地址:http://ip地址:15672 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 」拿到消费者对象去调用服务中的具体方法 (编辑:锡盟站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐