windows下consul加grpc的简单示例


前言

需要知道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(&reg)

	///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的创建流程及测试结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值