etcd는grpc명명해석 및 서비스 발견에 사용

이름 확인 및 서비스 검색


grpc는 두 개의 인터페이스를 제공합니다: google.golang.org/grpc/naming
  • Resolver: 명명 해석
    type Resolver interface {
        //  
        Resolve(target string) (Watcher, error)
    }
  • Watcher: 서비스 검색
    type Watcher interface {
        //  
        Next() ([]*Update, error)
        Close()
    }
  • etcd3 기본 Resolver 및 Watcher


    패키지: github.com/coreos/etcd/clientv3/namingetcd 원본 참조:naming 패키지

    핵심 코드

  • 서버단, etcd 그룹에 등록 서비스:
  •     //  etcd 
        cli, err := clientv3.New(clientv3.Config{
            // etcd 
            Endpoints:   []string{"127.0.0.1:2379"},
            DialTimeout: 5 * time.Second,
        })
        if err != nil {
            fmt.Println("[ ] connect etcd err:", err)
            return
        }
    
        //  
        r := &naming.GRPCResolver{Client: cli}
        //  etcd , myService, 8001 
        r.Update(context.TODO(), "myService", naming.Update{Op: naming.Add, Addr: "192.168.0.101:8001"})
    
        // TODO
        //  8001 ...
        // ...
  • client단, 연결 서비스
  •     //  etcd 
        cli, err := clientv3.New(clientv3.Config{
            // etcd 
            Endpoints:   []string{"127.0.0.1:2379"},
            DialTimeout: 5 * time.Second,
        })
        if err != nil {
            fmt.Println("[ ] connect etcd err:", err)
            return
        }
    
        r := &etcdnaming.GRPCResolver{Client: cli}
        b := grpc.RoundRobin(r)
    
        conn, err := grpc.Dial("myService", grpc.WithBalancer(b), grpc.WithBlock())
        if err != nil {
            panic(err)
        }
    
        // TODO
        //  conn client, userCli := protos.NewIUserServiceClient(conn)

    좋은 웹페이지 즐겨찾기