1.前言考虑到Python的性能和效率,Pythonweb端一直不温不火,而JAVA和Golang的微服务生态一直繁荣,在企业级应用开发中也被广泛使用,其中,本文将介绍一个Python微服务框架:《Nameko》2.Nameko介绍Nameko是一个小巧、简洁、异步通信的微服务架构。它使用RabbitMQ消息队列作为消息中间件,基于发布者,在订阅者模式下,消费者和生产者基于RPC进行通信项目地址:https://github.com/nameko/nameko3。下面以Flask为例说说搭建Python微服务的步骤3-1安装RabbitMQ,这里推荐使用Docker安装RabbitMQ。以Centos为例#1.下载RabbitMQ某个版本的镜像#MQ版本号:3.9.5dockerpullrabbitmq:3.9.5-management#2.查看镜像dockerimages#3.启动MQ容器#p:指定应用程序端口和web控制台端口#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:/var/lib/rabbitmq--hostnamemyRabbit-eRABBITMQ_DEFAULT_VHOST=my_vhost-eRABBITMQ_DEFAULT_USER=admin-eRABBITMQ_DEFAULT_PASS=admin3e83da0dc93MQ容器,使用-p指定两个端口\5672应用访问端口15672控制台web访问端口号然后,打开防火墙的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):#定义微服务名称name="generate_service"@rpcdefhello_world(self,msg):print('你好,我被customer(消费者)调用了,返回消息:{}'.format(msg))#returnresultreturn"HelloWorld!IAmamsgfromproducer!"复制代码3-4发布注册服务在终端使用nameko命令将目标文件中的服务注册到MQ#注册服务#producer_service:目标文件#admin:admin:MQ用户名和密码#ip地址:5672:MQ服务器ip地址和应用端口号#my_vhost:虚拟机名namekorunproducer_service--brokeramqp://admin:admin@ip地址:5672/my_vhost其中,my_vhost对应MQ容器启动时配置的虚拟机名称machine3-5Flask定义API,消费者调用服务。为了演示方便,这里我们使用Flask编写一个简单的API。首先定义MQ连接信息。然后,写一个API接口。请求方式为GET。最后在“ClusterRpcProxy”中使用nameko获取消费者对象调用服务中的具体方法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")#Returnresultreturnresult,200app.run(debug=True)3-6测试使用Postman调用上述API接口,消费者可以调用generator服务中的方法得到返回结果完整process#调用API接口http://127.0.0.1:5000/hello_world方法:GET4。最后,以上以Flask为例,讲解了构建微服务的完整过程。如果其他web框架(如Django、FastAPI等)集成微服务,服务流程类似,只需要修改生成API部分的逻辑即可。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发“J”也能领取大量学习资料。或者去编程学习网了解更多关于编程技术知识。
