一、安装依赖:
1、服务注册与发现服务:
go-micro默认以consul作为注册、发现服务。
mac安装:
brew install consul
2、micro工具集及编译可执行文件micro:
go get github.com/micro/micro
cd $GOPATH/src/github.com/micro/micro
go build
3、go-micro微服务框架:
go get github.com/micro/go-micro
4、拉取官方后端服务例子greeter及编译可执行文件
go get github.com/micro/examples/greeter/srv
cd $GOPATH/src/github.com/micro/examples/greeter/srv
go build
二、启动:
1、consul:
consul agent -dev
2、micro api网关
cd $GOPATH/src/github.com/micro/micro
./micro --registry_address=127.0.0.1:8500 --register_interval=5 --register_ttl=10 --registry=consul --api_handler=rpc --api_namespace=go.micro.srv api
(--api_handler=rpc --api_namespace=go.micro.srv,启动 rpc handler ,命名空间为go.micro.srv)
3、rpc服务(可以查看代码命名空间对应网关api启动时的go.micro.srv)
cd $GOPATH/src/github.com/micro/examples/greeter/srv
./srv --registry=consul
三、请求测试:
目前基础的微服务已经搭建起来,包含了需要的服务发现与注册consul、网关api、后端业务rpc服务。
控制台上输入以下命令:
curl -XPOST -H 'Content-Type: application/json' -d '{"name": "John"}' http://localhost:8080/greeter/say/hello
返回:
四、api handler:
上面的例子,网关api的handler模式为rpc,支持处理JSON及protobuf格式(根据请求content-type)的POST请求,并转向RPC服务。我们可以把网关api设置为api handler,相应的后端服务的代码可以直接接受http api.request的参数,如post、get等形式,那么我们需要修改我们的后端rpc逻辑代码吗?
答案是否定的,因为整个micro的最基础服务是基于rpc的服务,那么rpc service也就是最为基础的单位,官方的建议是在此基础上加上一层api service作为中间层,转发http的请求到最终的backend service中(rpc service)。
官方的greeter例子中包含了一个api service的代码逻辑,位于api目录下:
cd $GOPATH/src/github.com/micro/examples/greeter/api
go build
./api --registry=consul
修改网关api的启动参数为:
./micro --registry_address=127.0.0.1:8500 --register_interval=5 --register_ttl=10 --registry=consul --api_handler=api --api_namespace=go.micro.api api
请求:
curl "http://localhost:8080/greeter/say/hello?name=John"
以上可以得到相同的请求结果,区别是架构变成了下面的情况:
这样的好处就可以对外暴露一个api接口,而其业务逻辑可能包含多个rpc service,rpc service作为稳定的基础单位运行。
_957💪