一、前言大家好,我是安国!考虑到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=admin3e83da0dc938需要注意的是,启动MQ容器时,使用-p指定两个端口5672Application访问端口15672ConsoleWeb访问端口号然后,打开防火墙的5672和15672端口号PS:如果是云服务器,额外的安全组need待配置最后在浏览器web管中通过如下连接进入MQ后台管理页面地址:http://ip地址:156723-2安装依赖包在虚拟环境下使用pip命令安装nameko和flask依赖包#安装依赖包#namekopip3installnameko#flaskpip3installflask3-3创建服务生产者Producerfrom定义一个类,使用name属性定义服务的名称为“generate_service”然后使用装饰器“rpc”在服务中注册具体方法#producer_service.pyfromnameko.rpcimportrpcclassGenerateService(object):#定义微服务名称name="generate_service"@rpcdefhello_world(self,msg):print('你好,我被customer(消费者)调用了,返回消息:{}'.format(msg))#returnresultreturn"HelloWorld!我是来自制作人的消息!"#返回结果return"HelloWorld!IAmamsgfromproducer!"3-4发布注册服务在终端使用nameko命令将target文件中的服务注册到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,消费者调用服务。为了演示方便,这里使用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")#Returnresultreturnresult,200app.run(debug=True)3-6测试使用Postman调用以上API接口,消费者可以调用生成器服务中的方法,获取返回结果的完整过程#调用API接口http://127.0.0.1:5000/hello_worldMethod:GET4。最后,以上以Flask为例,讲解了构建微服务的完整过程。如果是其他web框架(如Django、FastAPI等)集成微服务的过程类似,只需要修改生成API部分的逻辑即可,更高级的内容可以参考官方文档Official文档:https://nameko.readthedocs.io...如果觉得文章还不错,请点赞、分享、留言,因为这将是我继续输出更多优质作品的最强大动力文章!推荐阅读Postman是如何调试加密接口的?5分钟,使用内网穿透,快速实现远程桌面。说说Jmeter是如何并发执行Python脚本的。谈谈PC端自动化最佳方案——Pywinauto谈谈PC端自动化最佳方案——WinAppDriver
