1、简介
没有监控,日志等信息是不可能在投入生产环境的。在go-kit中,以中间件的形式添加这些附属服务。其实就是增加新的Endpoint(服务端点),使用go-kit可以很容易的增加你需要的组件。
2、实践
go-kit的Middleware(中间件)的定义如下。
1 | type Middleware func(Endpoint) Endpoint |
原理很简单,假设传进去一个A_Endpoint,返回一个新的B_Endpoint,新返回的B_Endpoint其实包裹着A_Endpoint,在B_Endpoint中添加我们想要加载的组件。
2.1 统一加载入口
设计一个统一的入口,为每一个rpc接口添加Middleware。并且支持每一个该中间件不添加到制定rpc接口中。
1 | func (e *Endpoints) WrapAllExcept(middleware endpoint.Middleware, excluded ...string) { |
2.2、添加log组件
根据以下定义
1 | type Middleware func(Endpoint) Endpoint |
定义log中间件,使用gokit中的log组件
1 | import "github.com/go-kit/kit/log" |
2.3 添加instrumentation
定义instrumentation组件,使用gokit中的metrics去试试记录服务的行为统计信息。
1 | import "github.com/go-kit/kit/metrics" |
3、总结
利用中间件来添加需要的服务,围绕Endpoint来构建, 包括 断路器, 限流器,日志, Metrics, 请求追踪, 服务发现和负载均衡.使用起来还是挺方便的。