一、前言考虑到Python的性能和效率,PythonWeb端一直不温不火。JAVA和Golang的微服务生态一直很繁荣,在企业级应用开发中也得到广泛应用。本文将介绍一个Python微服务服务框架:《Nameko》2.Nameko介绍Nameko是一个小巧、简洁、异步通信的微服务架构。它使用RabbitMQ消息队列作为消息中间件,基于发布者和订阅者模型。其中,消费者和生产者基于RPC的通信项目地址:https://github.com/nameko/nameko3。下面以Flask为例,说说构建Python微服务的步骤。Example#1.下载某个版本的RabbitMQ镜像#MQ版本号:3.9.5dockerpullrabbitmq:3.9.5-management#2.查看镜像的docker镜像#3.启动MQ容器#p:指定应用portandWebconsoleport#hostname:hostname#e:环境变量#RABBITMQ_DEFAULT_VHOST:虚拟机名称#RABBITMQ_DEFAULT_USER:username#RABBITMQ_DEFAULT_PASS:password#3e83da0dc938:MQ镜像IDdockerrun-d--namerabbitmq3.9.5-p5672:5672-p15672:15672-v`pwd`/data:/var/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管理页面地址:http://ip地址:156723-2安装依赖包在虚拟环境下使用pip命令安装nameko和flask依赖包#安装依赖包#namekopip3installnameko#flaskpip3installflask3-3创建服务生产者Producer自定义一个类,使用name属性定义服务的名称为“generate_service”,然后使用装饰器“rpc”在服务中注册具体的方法#producer_service.pyfromnameko.rpcimportrpcclassGenerateService(object):#定义服务的名称microservicename="generate_service"@rpcdefhello_world(self,msg):print('你好,我被customer(消费者)调用了,returnmessage:{}'.format(msg))#returnresultreturn"HelloWorld!IAmamsgfromproducer!》3-4发布注册服务使用nameko命令将目标文件中的服务注册到终端中的MQ#注册服务#producer_service:targetfile#admin:admin:MQ用户名和密码#IP地址:5672:MQ服务器ip地址和应用端口号#my_vhost:虚拟机名namekorunproducer_service--brokeramqp://admin:admin@ipaddress:5672/my_vhost其中my_vhost对应的是配置时配置的虚拟机名MQ容器启动3-5Flask定义API和Consumers调用服务为了方便演示,这里我们使用Flask编写一个简单的API。首先定义MQ连接信息。然后,写一个API接口。请求方式为GET。最后使用nameko中的“ClusterRpcProxy”获取consumer对象调用服务具体方法在flaskimportFlaskfromnameko.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")#Returnresultreturnresult,200app.run(debug=True)3-6测试使用Postman调用上面的API接口,可以完成消费者调用generator服务中的方法,得到返回结果的完整过程#CallAPI接口http://127.0.0.1:5000/hello_worldMethod:GET4.最后,以上以Flask为例,讲解了构建微服务的完整过程。如果其他web框架(如Django、FastAPI等)集成微服务,过程类似。只需要修改生成API部分的逻辑即可。近期,我们整理了数百G的Python学习资料,包括入门电子书、教程、源码等,免费分享给大家!想上“Python编程学习圈”,发“J”免费领取
