当前位置: 首页 > 后端技术 > Python

硬肝Python微服务是一种怎样的体验?

时间:2023-03-26 13:15:18 Python

一、前言考虑到Python的性能和效率,PythonWeb端一直不温不火。JAVA和Golang的微服务生态一直很繁荣,在企业级应用开发中也得到广泛应用。本文将介绍一个Python微服务服务框架:《Nameko》2.Nameko介绍Nameko是一个小巧、简洁、异步通信的微服务架构。它使用RabbitMQ消息队列作为消息中间件,基于发布者和订阅者模型。其中,消费者和生产者基于RPC的通信三、实战下面以Flask为例说说搭建Python微服务的步骤3-1安装RabbitMQ并启动这里推荐使用Docker安装RabbitMQ,以Centos为例举个例子#1.下载某个版本的RabbitMQ镜像#MQ版本号:3.9.5dockerpullrabbitmq:3.9.5-management#2.查看镜像的docker镜像#3.启动MQ容器#p:specify应用程序端口和web控制台端口#hostname:hostname#e:环境变量#RABBITMQ_DEFAULT_VHOST:虚拟机名称#RABBITMQ_DEFAULT_USER:用户名#RABBITMQ_DEFAULT_PASS:密码#3e83da0dc938:MQ镜像IDdockerrun-d--namerabbitmq3.9.5-p5672:5672-p15672:15672-v`pwd`/data://lib/rabbitmq--hostnamemyRabbit-eRABBITMQ_DEFAULT_VHOST=my_vhost-eRABBITMQ_DEFAULT_USER=admin-eRABBITMQ_DEFAULT_PASS=admin3e83da0dc938需要注意的是,在启动MQ容器的时候,使用-p指定两个端口5672应用访问端口15672consoleWeb访问端口号然后打开防火墙的5672和15672端口PS:如果是云服务器,需要再配置一个安全组最后进入MQ后台web在浏览器中通过如下连接管理页面3-2安装依赖包使用pip命令在虚拟环境中安装nameko和flask依赖包#安装依赖包#namekopip3installnameko#flaskpip3installflask3-3创建服务生产者Producer自定义一个类,使用name属性定义服务的名称为“generate_service”,然后使用装饰器“rpc”注册服务中的具体方法#producer_service.pyfromnameko.rpcimportrpcclassGenerateService(object):#Definemicroservicename="generate_service"@rpcdefhello_world(self,msg):print('你好,我被customer(consumer)调用了),returnmessage:{}'.format(msg))#返回结果return"HelloWorld!IAmamsgfromproducer!"3-4发布注册服务在终端使用nameko命令将目标文件中的服务注册到MQ中#Registerservice#producer_service:targetfile#admin:admin:MQ用户名密码#ipaddress:5672:MQ服务器ip地址和应用端口号#my_vhost:虚拟机名korunproducer_service--brokeramqp://admin:admin@ip地址:5672/my_vhost其中my_vhost对应MQ容器启动时配置的虚拟机名3-5Flask定义API和消费者调用服务。为了演示方便,这里使用Flask编写了一个简单的API。首先定义MQ连接信息然后编写一个API接口,请求方式为GET最后在nameko中使用“ClusterRpcProxy”获取消费者对象调用服务中的具体方法fromflaskimportFlaskfromnameko.standalone.rpcimportClusterRpcProxyapp=Flask(__name__)#MQ配置config_mq={'AMQP_URI':"amqp://admin:admin@ipaddress:5672/my_vhost"}@app.route('/hello_world',methods=['GET'])defcall_service():withClusterRpcProxy(config_mq)asrpc:#消费者调用微服务(生产者)获取服务(生产者)的返回值result=rpc.generate_service.hello_world(msg="xagmsg")#返回结果returnresult,200app.run(debug=True)3-6测试使用Postman调用上面的API接口,消费者可以调用generator服务中的方法得到返回结果的完整过程#调用API接口http://127.0.0.1:5000/hello_world方法:GET4。最后以Flask为例,讲解构建微服务的完整过程。如果其他web框架(如Django、FastAPI等)集成微服务,过程类似,只需要修改生成API部分的逻辑即可,更多进阶内容,可以参考官方文档。近期,我们整理了数百G的Python学习资料,包括入门电子书、教程、源码等,免费分享给大家!想上“Python编程学习圈”,发“J”免费领取