66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
|
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)
|
|||
|
}
|