gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/registry/service/handler/handler.go (about) 1 package handler 2 3 import ( 4 "context" 5 "time" 6 7 "gitee.com/liuxuezhan/go-micro-v1.18.0/errors" 8 "gitee.com/liuxuezhan/go-micro-v1.18.0/registry" 9 "gitee.com/liuxuezhan/go-micro-v1.18.0/registry/service" 10 pb "gitee.com/liuxuezhan/go-micro-v1.18.0/registry/service/proto" 11 ) 12 13 type Registry struct { 14 // internal registry 15 Registry registry.Registry 16 } 17 18 func (r *Registry) GetService(ctx context.Context, req *pb.GetRequest, rsp *pb.GetResponse) error { 19 services, err := r.Registry.GetService(req.Service) 20 if err != nil { 21 return errors.InternalServerError("go.micro.registry", err.Error()) 22 } 23 for _, srv := range services { 24 rsp.Services = append(rsp.Services, service.ToProto(srv)) 25 } 26 return nil 27 } 28 29 func (r *Registry) Register(ctx context.Context, req *pb.Service, rsp *pb.EmptyResponse) error { 30 var regOpts []registry.RegisterOption 31 if req.Options != nil { 32 ttl := time.Duration(req.Options.Ttl) * time.Second 33 regOpts = append(regOpts, registry.RegisterTTL(ttl)) 34 } 35 36 err := r.Registry.Register(service.ToService(req), regOpts...) 37 if err != nil { 38 return errors.InternalServerError("go.micro.registry", err.Error()) 39 } 40 41 return nil 42 } 43 44 func (r *Registry) Deregister(ctx context.Context, req *pb.Service, rsp *pb.EmptyResponse) error { 45 err := r.Registry.Deregister(service.ToService(req)) 46 if err != nil { 47 return errors.InternalServerError("go.micro.registry", err.Error()) 48 } 49 return nil 50 } 51 52 func (r *Registry) ListServices(ctx context.Context, req *pb.ListRequest, rsp *pb.ListResponse) error { 53 services, err := r.Registry.ListServices() 54 if err != nil { 55 return errors.InternalServerError("go.micro.registry", err.Error()) 56 } 57 for _, srv := range services { 58 rsp.Services = append(rsp.Services, service.ToProto(srv)) 59 } 60 return nil 61 } 62 63 func (r *Registry) Watch(ctx context.Context, req *pb.WatchRequest, rsp pb.Registry_WatchStream) error { 64 watcher, err := r.Registry.Watch(registry.WatchService(req.Service)) 65 if err != nil { 66 return errors.InternalServerError("go.micro.registry", err.Error()) 67 } 68 69 for { 70 next, err := watcher.Next() 71 if err != nil { 72 return errors.InternalServerError("go.micro.registry", err.Error()) 73 } 74 err = rsp.Send(&pb.Result{ 75 Action: next.Action, 76 Service: service.ToProto(next.Service), 77 }) 78 if err != nil { 79 return errors.InternalServerError("go.micro.registry", err.Error()) 80 } 81 } 82 }