偶然找到了nameko。
看这个名字,感觉是个日本程序员的作品。
微服务,rpc做微服务,思路很简单,很直接。
1、用docker快速搭建一个环境
docker run -p 5672:5672 --hostname nameko-rabbitmq rabbitmq:3
这样完成了基础环境的构建和rabbitmq的运行。
2、然后可以编写自己的python代码,也就是自己的微服务,将要以rpc方式对外提供服务的微服务,hello.py
from nameko.rpc import rpc
class GreetingService:
name = "greeting_service"
@rpc
def hello(self, name):
return "Hello, {}!".format(name)
运行起来:
nameko run hello.py
可以看到注册到rabbitmq,
3、使用shell 测试一下这个微服务:
nameko shell,这是一个微服务的调测shell。
>> n.rpc.greeting_service.hello(name='jerry')
4、在flask中调用微服务
from flask import Flask, request
from flasgger import Swagger
from nameko.standalone.rpc import ClusterRpcProxy
app = Flask(__name__)
CONFIG = {'AMQP_URI': "amqp://guest:guest@localhost"}
@app.route('/hello', methods=['POST'])
def hello():
with ClusterRpcProxy(CONFIG) as rpc:
result = rpc.greeting_service.hello(name="jerry")
return result, 200
app.run(debug=True)
运行起来 python app.py
说明
- 微服务采用一个class包装起来,这里使用了GreetingService,注意这里面使用了类变量 name,这是必须的,表明我是谁,也就是微服务真正标识我这个微服务是谁,是通过这个name来表达的。
- 在微服务类中,可以定义各种实例方法,如果需要将某些实例方法暴露出去,则需要在方法前面增加一个装饰器@rpc即可。
- 在shell下调测微服务,是一种比较方便的做法,查看微服务提供的数据是否如我们所愿。
- flask应用调用微服务,也是非nameko应用调用微服务的一种通用的方法。通过ClusterRpcProxy来完成
网友评论