rpc、grpc、protobuf使用(macos)

rpc、grpc、protobuf使用(macos),第1张

1、rpc 2、grpc 官网

grpc官网——go:https://www.grpc.io/docs/languages/go/quickstart/

安装
go get -u -v google.goland.org/grpc
添加rpc服务 在.proto文件中
service 服务名 {
	rpc 函数名(参数:消息体) returns(返回值:消息);
}
message People {
	string name = 1;
}
message Student {
	int32 age = 2;
}
例:
service hello {
	rpc Helloworld(People) returns(Student);
}

protobuf编译期间默认不编译服务;要想编译服务需要使用grpc,编译指令为

protoc *.proto --go_out=plugins=grpc:./ 
clien和server通信demo .proto文件
syntax = "proto3";

package pb;

option go_package ="./";

message Teacher {
  int32 age = 1;
  string name = 2;
}

service SayName {
  rpc SayHello(Teacher) returns (Teacher);
}
生成.pb.go文件
protoc *.proto --go_out=plugins=:./
服务端grpc
package main

import (
	"IHome/day01/pb"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"net"
)

//2.1 定义类
type Children struct {
	
}

//2.2 按接口绑定类方法
func (this *Children) SayHello(ctx context.Context, t *pb.Teacher) (*pb.Teacher, error) {
	t.Name += " is sleeping"
	return t, nil
}

func main()  {
	//1 初始化grpc对象
	grpcServer := grpc.NewServer()

	//2 注册服务
	pb.RegisterSayNameServer(grpcServer, new(Children))

	//3 设置监听,指定ip、port
	listener, err := net.Listen("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("net.listen : ", err)
		return
	}
	defer listener.Close()

	//4 启动服务
	grpcServer.Serve(listener)
}
客户端grpc
package main

import (
	"IHome/day01/pb"
	"context"
	"fmt"
	"google.golang.org/grpc"
)

func main()  {
	//1 连接grpc服务
	grpcConn, err := grpc.Dial("127.0.0.1:8080", grpc.WithInsecure())
	if err != nil {
		fmt.Println("grpc.Dial : ", err)
		return
	}
	defer grpcConn.Close()

	//2 初始化grpc客户端
	grpcClient := pb.NewSayNameClient(grpcConn)

	//创建并初始化Teacher对象
	var teacher pb.Teacher
	teacher.Name = "jmm"
	teacher.Age = 23

	//3 调用远程服务
	t, err := grpcClient.SayHello(context.TODO(), &teacher)
	if err != nil {
		fmt.Println("grpc.Dial : ", err)
		return
	}
	fmt.Println(t)
}
遇到的问题 grpc "google.golang.org/grpc"报红
go get google.golang.org/grpc
3、protobuf 官网

protobuf官网——go:https://developers.google.cn/protocol-buffers/docs/proto3

安装protobuf 官网下载protobuf https://github.com/protocolbuffers/protobuf/releases/下载后解压,命令行进入到文件夹下

输入./configure --prefix=/usr/local/protobuf
接着输入
make
make check
sudo make install
验证安装是否成功
which protoc
protoc --version

goland中安装使用protobuf

编写的注意事项 message成员编号,可以不从1开始,但不能重复可以使用message嵌套定义数组、切片使用 repeated 关键字可以使用枚举 enum可以使用联合体 oneof 编译protobuf
protoc *.proto --go_out=./ 
遇到的问题 protoc-gen-go: unable to determine Go import path for
需要在 .proto 中指定绝对路径
protoc-gen-go-grpc: program not found or is not executable
go get -u google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go
go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/994922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存