微服务架构是把应用解耦成逻辑上的相对隔离的服务,API网关则是提供单一的入口把服务的API统一起来。通过服务发现,Micro API
以http
方式,将请求动态路由到具体的后台服务接口。
Micro API
是基于go-micro
开发,所以它天然具备服务发现、负载均衡、编码及RPC通信的能力。因此,Micro API
也是go-micro
体系中的一个微服务,它自身也是可插拔的。
安装
通过命令go get -u github/micro/micro
进行安装,如果安装成功,那么在命令行输入micro --version
就可以看到它的版本信息。
使用
Micro API
使用带分隔符的命名空间来在逻辑上区分后台服务及公开的服务,命名空间及HTTP请求路径会用于解析服务名与方法,比如GET /foo HTTP/1.1
会被路由到go.micro.api.foo
服务上。
Micro API
默认的命名空间是go.micro.api
,这个可以修改。例如:MICRO_NAMESPACE=com.example.api
。micro api命令用法:micro [global options] command [command options] [arguments...]
。
示例
下面是一个三层服务架构:
micro api
:(localhost:8080)-http访问入口api service
:(go.micro.api.book)-对外暴露的API服务backend service
:(go.micro.srv.book)-内网的后台服务
代码附在文后,分别启动这三层服务。
- 启动
micro api
,使用命令micro api
。 - 运行服务,
go run srv/main.go
- 运行api,
go run api/api.go
micro api
会运行api网关,用法:micro api [command options] [arguments...]
OPTIONS
允许的选项有:
--address
,用来设置api地址,例如:0.0.0.0:8080--handler
,用来指定用于将HTTP请求映射到服务的请求处理程序,值有四个:api,event,http,rpc。--namespace
,设置api的命名空间,例如:com.example.api--resolver
,设置api使用的主机名解析程序,micro使用命名空间与HTTP请求路径来动态路由到具体的服务。API命名的空间是go.micro.api
,可以通过指令--namespace
或者环境变量MICRO_NAMESPACE=设置命名空间
。--resolver
的值有三个:host,path,grpc
。
启动服务后,我们就可以发送请求curl "http://localhost:8080/book/register?name=john"
。
Http请求的路径/book/register
会被路由到服务go.micro.api/book
的方法Book.Register
上。
注意: 如果通过micro api
命令启动api服务时,缺少参数--handler
,那么在访问上面的地址时,会出现下面的响应结果。
{
"id": "go.micro.api",