diff --git a/src/v1/grpcserver/server_dis_etcd.go b/src/v1/grpcserver/server_dis_etcd.go new file mode 100644 index 0000000000000000000000000000000000000000..7e1b1cf2fdb56e6ba57c806461366e0a34232bba --- /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 0000000000000000000000000000000000000000..ac25f9e3143265f6611fc2110955cb6d9fd8085b --- /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 0000000000000000000000000000000000000000..1f2baf1a00ebd15b6f39bc45ceb97fe9f9ca0810 --- /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 0000000000000000000000000000000000000000..5fac5e2155c7979ab5ce3a911fd44c978ea030d1 --- /dev/null +++ b/src/v1/grpcserver/servier_reg.go @@ -0,0 +1,7 @@ +package grpcserver + + +//服务注册者 接口 +type IServiceRegister interface{ + Register(name string,addr string) +}