前言
需要知道grpc客户端和服务器端的使用流程
需要安装protobuf
具体代码
一、随便创建一个protoc文件
syntax = "proto3"; //指定版本信息
package pb; //后期生成go文件的包名
option go_package ="../pb";
message Person{
// 名字
string name = 1;
// 年龄
int32 age = 2 ;
}
//定义RPC服务
service hello {
rpc sayHello (Person)returns (Person);
}
二、生成go文件
命令:protoc --go_out=plugins=grpc:./ *.proto
这里就不展示生成的go文件了
三、创建服务器端
package main
import (
"context"
"fmt"
"github.com/hashicorp/consul/api"
"google.golang.org/grpc"
"net"
"pb/pb"
)
type Children struct {
}
func (this *Children) SayHello(ctx context.Context, p *pb.Person) (*pb.Person, error) {
p.Name = "hello" + p.Name
return p, nil
}
func main() {
//把grpc注册打consul上
//1初始化consul配置
consulConfig := api.DefaultConfig()
//2创建consul对象
consulClient, err := api.NewClient(consulConfig)
if err != nil {
fmt.Println("api.newclient err:", err)
return
}
//3告诉consul即将注册的服务信息
reg := api.AgentServiceRegistration{
ID: "bj38",
Tags: []string{"grpc", "consul"},
Name: "grpc and consul",
Port: 8800,
Address: "127.0.0.1",
Check: &api.AgentServiceCheck{
CheckID: "consul grpc test",
TCP: "127.0.0.1:8800",
Timeout: "1s",
Interval: "5s",
},
}
//4.注册服务到consul上
consulClient.Agent().ServiceRegister(®)
///grpc远程调用//
//初始化grpc对象
grpcServer := grpc.NewServer()
//注册服务
pb.RegisterHelloServer(grpcServer, new(Children))
//设置监听
listener, err := net.Listen("tcp", "127.0.0.1:8800")
if err != nil {
fmt.Println("listen err:", err)
return
}
defer listener.Close()
fmt.Println("服务启动")
//启动服务
grpcServer.Serve(listener)
}
如果在///grpc远程调用//
之前的代码不要的话,也就是没有用consul直接用的grpc连接的
四、创建客户端
package main
import (
"context"
"fmt"
"github.com/hashicorp/consul/api"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"pb/pb"
"strconv"
)
func main() {
//初始化consul
consulConfig := api.DefaultConfig()
//创建consul对象(可以重新指定consul属性ip/port,也可以使用默认)
consulClient, err := api.NewClient(consulConfig)
//服务发现从consul上获取健康的服务
services, _, err := consulClient.Health().Service("grpc and consul", "grpc", true, nil)
addr := services[0].Service.Address + ":" + strconv.Itoa(services[0].Service.Port)
//grpc的方式//
//连接grpc服务
//grpcConn, _ := grpc.Dial("127.0.0.1:8800", grpc.WithTransportCredentials(insecure.NewCredentials()))
//使用拿到的ip进行连接
grpcConn, _ := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
//初始化grpc客户端
grpcclient := pb.NewHelloClient(grpcConn)
var person pb.Person
person.Name = " Andy"
person.Age = 18
//调用远程函数
p, err := grpcclient.SayHello(context.TODO(), &person)
fmt.Println(p, err)
}
五、目录如下
六、进行测试
先启动客户端
启动consul
看下ui界面
可以看见这个服务启动成功了
启动客户端
正确输出,结束
总结
以上就是本文要讲的内容,本文简单介绍了consul加grpc的创建流程及测试结果