Skip to content

Latest commit

 

History

History
40 lines (25 loc) · 2.21 KB

File metadata and controls

40 lines (25 loc) · 2.21 KB

参考文章

  1. go-kit官方issue REST style URLs with HTTP Client

  2. opencensus-gokit-example

在原本的restful示例中, 我们是通过curl来访问的. 但是在微服务间, restful接口相互调用应该通过什么工具呢? 本示例是受到grpc示例的影响, 编写的restful接口客户端示例代码.

在go-kit中, 其实也是有对应的http微服务客户端的. 与grpc接口一样, 面对restful接口, 我们也需要提前知道API地址. 不过grpc客户端一般需要将链接对象在服务内部加以维护, 而restful客户端不需要这样做.

http transport也有NewClient()函数, 但是面对restful接口, 如何将我们想要的参数添加到路径中呢?

我查阅了官方issue, 参考文章1给出了解决方案. 与grpc客户端相同, 我们需要为restful客户端定义EncodeLoremRequestDecodeLoremResponse, 前者将LoremRequest请求对象转换成restful形式的/lorem/{type}/{min}/{max}格式的url.

这一做法借鉴了参考文章2工程的方式, ta将所有http接口集合成了一张"路由表", 服务端挂载handler与客户端创建endpoint时用同一张表就可以将mux.NewRouter()操作抽离出来, 正是本例中新增的routes.go文件.

另外提一下, 参考文章2(参考文章1中提到的示例)是一个不错的微服务工程, 代码量不多, 但确是一个完整的项目, 以后可以参考.

运行

先启动 server 服务

$ go run cmd/server/main.go
Starting server at port 8080

可以通过curl直接访问server端, 示例如下

$ curl -XPOST http://localhost:8080/lorem/sentence/5/20
{"message":"Inde abs contra scrutamur benedicendo quendam ita nam concurrunt diu passionis pax specto aut sectatur pede aer."}

也可以通过运行 client 服务对 server 服务发送请求. 这里的 client 就是调用 server 服务的另一个微服务, 不过在实际场景中, client 应该也是长驻进程, 且维持与 server 服务的长连接, 实时进行请求, 而不是像本示例中请求完成后就立即结束.

$ go run cmd/client/main.go
Cura ob pro qui tibi inveni dum qua fit donec amare.