package main import ( "context" "fmt" "github.com/go-kit/kit/examples/shipping/booking" "github.com/go-kit/kit/log" "github.com/go-kit/kit/sd/etcdv3" transport"github.com/go-kit/kit/transport/grpc" "google.golang.org/grpc" "net" "standard/etcd/go-kit/pb" "standard/etcd/go-kit/server" "time" ) func main() { var ( etcdServer = "192.168.3.106:2379" //etcd服务的IP地址 prefix = "/services/book/" //服务的目录 ServerInstance = "127.0.0.1:7000" //当前实例Server的地址 key = prefix + ServerInstance //服务实例注册的路径 value = ServerInstance ctx = context.Background() //服务监听地址 serviceAddress = ":7000" ) //etcd连接参数 option := etcdv3.ClientOptions{DialTimeout: time.Second * 3, DialKeepAlive: time.Second * 3} //创建连接 client, err := etcdv3.NewClient(ctx, []string{etcdServer}, option) if err != nil { panic(err) } //创建注册服务 registrar := etcdv3.NewRegistrar(client, etcdv3.Service{Key: key, Value: value}, log.NewNopLogger()) registrar.Register() //启动注册服务 bookServer := new(server.BookServer) bookListHandler := transport.NewServer( server.MakeGetBookListEndpoint(), server.DecodeRequest, server.EncodeResponse, ) bookInfoHandler := transport.NewServer( server.MakeGetBookInfoEndpoint(), server.DecodeRequest, server.EncodeResponse, ) bookServer.BookListHandler = bookListHandler bookServer.BookInfoHandler = bookInfoHandler listener, err := net.Listen("tcp", serviceAddress) if err != nil { fmt.Println(err) return } //UnaryInterceptor 一元拦截器 gs := grpc.NewServer(grpc.UnaryInterceptor(transport.Interceptor)) pb.RegisterBookServerServer(gs, bookServer) //调用protoc生成的代码对应的注册方法 gs.Serve(listener) }