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 flask

3-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!"   # 返回结果        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:GET

4. 最后

上面以 Flask 为例讲解了微服务的搭建的完整流程

如果是其他 Web 框架( 比如 Django、FastAPI 等 )集成微服务流程是类似的,只需要修改生成 API 部分的逻辑即可,更多进阶内容大家可以参考官方文档

官方文档:https://nameko.readthedocs.io/en/stable/

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

推荐阅读

Postman 如何调试加密接口?

5 分钟,使用内网穿透快速实现远程桌面

聊聊 Jmeter 如何并发执行 Python 脚本

聊聊 PC 端自动化最佳方案 - Pywinauto

聊聊 PC 端自动化最佳方案 - WinAppDriver

推荐一款 Python 微服务框架 - Nameko的更多相关文章

  1. 【Python】Python 微服务框架 nameko

    nameko: 1.支持服务发现.负载均衡 2.支持依赖自动注入,使用很方便 3.缺点:超时.限速.权限等机制不完善 代码示例:https://github.com/junneyang/nameko- ...

  2. 推荐一款分布式微服务框架 Surging

    surging   surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zookeeper.Consul作为surging服务的注册中心,集成了哈希,随机,轮询,压力最小优先作为 ...

  3. python 微服务方案

    介绍 使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力.有些异步框架Tornado.Twisted.Gevent 等就是为了解决性能问题.这些框架在性能上有些 ...

  4. python 微服务开发书中几个方便的python框架

    python 微服务开发是一本讲python 如果进行微服务开发的实战类书籍,里面包含了几个很不错的python 模块,记录下,方便后期回顾学习 处理并发的模块 greenlet && ...

  5. Dubbo Ecosystem - 从微服务框架到微服务生态

    从微服务框架到微服务生态,这是微服务发展的必然趋势,也是Dubbo社区满足开发者更高效的构建微服务体系期望的使命和担当. 近期,Apache Dubbo PPMC 望陶(社区昵称:ralf0131)做 ...

  6. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程 ...

  7. kratos微服务框架学习笔记一(kratos-demo)

    目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...

  8. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  9. 在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统

    1.APM工具的选取 Apm监测工具很多,这里选用网上比较火的一款Skywalking. Skywalking是一个应用性能监控(APM)系统,Skywalking分为服务端Oap.管理界面UI.以及 ...

随机推荐

  1. 在Activity和附贴的Fragment中同时使用多Surface错乱解决

    SurfaceView因为独特的双缓冲机制,在android应用中十分普遍,视频播放器.摄像机预览等都会用到,如果在两个Fragment或者一个Fragment和Activity同时使用都会造成无法正 ...

  2. windows笔记-在可执行文件或DLL的多个实例之间共享静态数据

    全局数据和静态数据不能被同一个. exe或DLL文件的多个映像共享,这是个安全的默认设置.但是,在某些情况下,让一个. exe文件的多个映像共享一个变量的实例是非常有用和方便的. 每个. exe或DL ...

  3. asp.net core 中的路由

  4. 【springboot】集成Druid 作为数据库连接池

    转自:https://blog.csdn.net/cp026la/article/details/86508139 1. 引言 用户的每一次请求几乎都会访问数据库,访问数据库需要向数据库获取链接,而数 ...

  5. 一招解决下载或下拉GitHub项目速度太慢的问题

    相信很多朋友都有过这样的体验,就是从Github上下载或clone别人的项目时特别慢,甚至还会出现链接意外终止的情况,那么今天就来给大家分享一个提速的方法,步骤也非常简单,亲测有效! 首先进入你的目标 ...

  6. Linux压缩解压 tar.gz格式的文件.查看tomcat是否运行

    tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...

  7. excel快捷键如下:

    ALT+ 空格键,然后按下 X ALT+ 空格键,然后按下 R  首先打开表格,在A1对角用鼠标左键单击,界面会全部选中,然后调整字体大小框里的数字,回车,表格就变大了. 同时按Alt和E,再按L   ...

  8. Windows内核基础知识-8-监听进程、线程和模块

    Windows内核基础知识-8-监听进程.线程和模块 Windows内核有一种强大的机制,可以在重大事件发送时得到通知,比如这里的进程.线程和模块加载通知. 本次采用链表+自动快速互斥体来实现内核的主 ...

  9. golang jwt

    什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. JWT作用? ...

  10. SpringBoot - 搭建静态资源存储服务器

    目录 前言 环境 实现效果 具体实现 文件上传 配置类 上传接口 上传实现 辅助类 实体 上传测试 文件访问 配置类 项目源码 前言 记录下SpringBoot下静态资源存储服务器的搭建. 环境 wi ...