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  }