您现在的位置是:亿华云 > 应用开发
硬肝一次 Python 微服务是一种什么体验?
亿华云2025-10-09 04:01:01【应用开发】5人已围观
简介本文转载自微信公众号「AirPython」,作者星安果。转载本文请联系AirPython公众号。1. 前言大家好,我是安果!考虑到 Python 性能及效率性,Python Web 端一直不温不火,J
本文转载自微信公众号「AirPython」,硬肝作者星安果。服务转载本文请联系AirPython公众号。体验
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 flask3-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:GET4. 最后
上面以 Flask 为例讲解了微服务的搭建的完整流程
如果是其他 Web 框架( 比如 Django、FastAPI 等 )集成微服务流程是类似的,只需要修改生成 API 部分的逻辑即可,更多进阶内容大家可以参考官方文档
官方文档:https://nameko.readthedocs.io/en/stable/
b2b供应网很赞哦!(31)
相关文章
- 在众多公司中,如果我们必须选择一家可信的公司,那当然是信得过的。
- 凌华智能全球首发Intel®Core™ Ultra COM-HPC Mini模块:95mm×70mm小尺寸迸发强悍算力
- NVIDIA CUDA-Q 平台助力推进量子计算研究
- 浪潮信息IPF24: 发展人工智能+,创新需要激发活力、拓展路径、加速落地
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 数据中心有哪些物理安全威胁?
- 确保2024年数据中心可靠性和正常运行时间的主要策略
- 2024 年及以后影响数据中心的主要趋势和技术
- 3、商标域名一经注册,就可以作为域名裁决过程中的主要信息之一。这可以大大增加公司被抢注的相关域名胜诉的机会。
- 新华三技术服务战略升级,打造“四桨协同”的技术服务体系