package main import ( "context" "fmt" "git.gqnotes.com/guoqiang/grpcexercises/consuldemo/pb" "git.gqnotes.com/guoqiang/grpcexercises/consuldemo/pkg/consul" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "log" "math/rand" ) func main() { // 通过consul服务发现,调用grpc接口 consulAddress := "localhost:8500" serviceName := "service-grpcdemo" // 初始化consul客户端 if err := consul.InitConsulClient(consulAddress); err != nil { log.Fatalf("init consul client failed:%+v", err) } // 获取consul客户端 client := consul.GetConsulClient() // 获取服务 services, _, err := client.Health().Service(serviceName, "", true, nil) if err != nil { log.Fatalf("get service failed:%+v", err) } // 随机获取一个服务 service := services[rand.Intn(len(services))] // 拼接服务地址 address := fmt.Sprintf("%s:%d", service.Service.Address, service.Service.Port) log.Printf("grpc client call address:%s", address) // 连接grpc服务 conn, err := grpc.Dial(address, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("grpc client dial failed:%+v", err) } defer conn.Close() // 创建grpc客户端 grpcClient := pb.NewGreetServiceClient(conn) // 调用grpc接口 resp, err := grpcClient.Greet(context.Background(), &pb.GreetRequest{ Greeting: "zhangsan", }) if err != nil { log.Fatalf("grpc client call greet failed:%+v", err) return } log.Printf("grpc client call greet success:%+v", resp) }