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)
|
||
}
|