From 9f0dfc512333171f7d0993eb9789cd73b17d3380 Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Fri, 24 Sep 2021 07:52:20 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20grpc=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/grpcserver/server_dis_etcd.go | 21 ++++++++ src/v1/grpcserver/server_grpc.go | 75 ++++++++++++++++++++++++++ src/v1/grpcserver/service_discovery.go | 7 +++ src/v1/grpcserver/servier_reg.go | 7 +++ 4 files changed, 110 insertions(+) create mode 100644 src/v1/grpcserver/server_dis_etcd.go create mode 100644 src/v1/grpcserver/server_grpc.go create mode 100644 src/v1/grpcserver/service_discovery.go create mode 100644 src/v1/grpcserver/servier_reg.go diff --git a/src/v1/grpcserver/server_dis_etcd.go b/src/v1/grpcserver/server_dis_etcd.go new file mode 100644 index 0000000..7e1b1cf --- /dev/null +++ b/src/v1/grpcserver/server_dis_etcd.go @@ -0,0 +1,21 @@ +package grpcserver + +type EtcdRegisterFinder struct{ + etcdAddr string +} + +func NewEtcdRegisterFinder(etcdAddr string,)(IServiceRegister,error){ + + return &EtcdRegisterFinder{ + etcdAddr:etcdAddr, + } +} + +func (r *EtcdRegisterFinder) Register(name string,addr string)error{ + sr := etcdv3.RegisterService( + r.etcdAddr, + name, + addr, 5) + go sr.ListenLease() + return nil +} \ No newline at end of file diff --git a/src/v1/grpcserver/server_grpc.go b/src/v1/grpcserver/server_grpc.go new file mode 100644 index 0000000..ac25f9e --- /dev/null +++ b/src/v1/grpcserver/server_grpc.go @@ -0,0 +1,75 @@ +package grpcserver + +type HandlerFunc = func(*grpc.Server) + +type GRPCServer struct { + name string + listenAdd string + s *grpc.Server + HandlerFunc HandlerFunc + + serviceRegister IServiceRegister + RegisterAddr string +} + + +func NewGRPCServer(name string, addr string, )(*GRPCServer, error){ + + + return &GRPCServer{ + name:name, + listenAdd:addr, + s:grpc.NewServer(), + },nil +} + +func (server *GRPCServer) AddServiceRegister(r IServiceRegister) { + h.serviceRegister=r +} + +func (server *GRPCServer) Run() error { + err := h.registerService() + if err != nil { + return err + } + return h.run() +} + +func (server *GRPCServer) run() error { + lis, err := net.Listen("tcp", h.listenAdd) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + + if h.RegisterFunc != nil { + h.RegisterFunc(server.s) + } + + fmt.Printf("[%s]rpc running at %s\n", h.AppName, h.RpcPort) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + return err + } + + return nil +} + + +func (server *GRPCServer) registerService() error { + var err error + rpcAddr := h.RegisterAddr + if etcdAddr == "" { + return fmt.Errorf("sr register addr is empty") + } + if rpcAddr == "" { + + rpcAddr, err = utils.GetLocalIP() + if err != nil { + return err + } + } + if h.registerService!=nil{ + registerService.Register(h.AppName,rpcAddr) + } + return nil +} diff --git a/src/v1/grpcserver/service_discovery.go b/src/v1/grpcserver/service_discovery.go new file mode 100644 index 0000000..1f2baf1 --- /dev/null +++ b/src/v1/grpcserver/service_discovery.go @@ -0,0 +1,7 @@ +package grpcserver + + +//服务发现者 接口 +type IServiceDiscovery interface{ + +} diff --git a/src/v1/grpcserver/servier_reg.go b/src/v1/grpcserver/servier_reg.go new file mode 100644 index 0000000..5fac5e2 --- /dev/null +++ b/src/v1/grpcserver/servier_reg.go @@ -0,0 +1,7 @@ +package grpcserver + + +//服务注册者 接口 +type IServiceRegister interface{ + Register(name string,addr string) +} -- Gitee