使用go-kit中间件时,一般在endpoint中进行中间件的开发。
在endpoint层插入hystrix中间件的插入。
endpoint.go
func MakeEndpoint (svc services.StringService) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
req := request.(*StringService.Request)
rep , err := svc.Diff(ctx , req)
return rep , err
}
}
go-kit使我们更注重对服务逻辑的开发,对中间过程的省略会减少很多的错误发生。
main.go
package main
import (
"balencegrpc/services"
"balencegrpc/router"
"balencegrpc/proto"
"balencegrpc/discover"
"balencegrpc/endpoints"
"github.com/go-kit/kit/circuitbreaker"
"google.golang.org/grpc"
"google.golang.org/grpc/health/grpc_health_v1"
"log"
"net"
)
func main() {
//svc := new()
svc := services.ServiceI{}
endpoint := circuitbreaker.Hystrix("testname")(endpoints.MakeEndpoint(svc))
lis , err := net.Listen("tcp" , ":8081")
if err != nil {
log.Println(err)
return
}
router := router.NewRouter(svc , endpoint)
grpcserver := grpc.NewServer()
c := discover.Service{}
grpc_health_v1.RegisterHealthServer(grpcserver , &c)
StringService.RegisterStringServiceServer(grpcserver , router)
rs := discover.NewService()
rs.Register("127.0.0.1" , 8081)
grpcserver.Serve(lis)
}
我们在main.go中进行添加hystrix对endpoint进行封装,,使用hystrix进行服务熔断的处理。其实使用go-kit封装的。也可以自行封装一个中间件,在创建endpoint时进行封装