Golang开发gRpc服务
- 首先本机安装proto客户端,并配置环境变量
- 创建golang项目 结构如下图
3.新建一个helloworld.proto文件,内容如下
syntax = "proto3";
package helloworld;
option java_package = "com.example.grpc.helloworld";
option java_multiple_files = true;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
这个文件稍后还会用在springboot项目中
4.使用命令将proto文件生成成go文件,命令如下
# proto文件编译为go文件命令
// protoc --go_out=plugins=grpc:{输出目录} {proto文件}
protoc --go_out=plugins=grpc:./helloworld/ ./helloworld.proto
5.在server文件夹下 新建main.go,作为gRpc的服务端
/*
@Time : 2020/5/25 15:01
@Author : wkang
@File : server
@Description:
*/
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"log"
"net"
pb "../helloworld"
)
const (
port = ":50051"
)
// server is used to implement helloworld.GreeterServer.
type server struct{}
// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
fmt.Println("######### get client request name :"+in.Name)
return &pb.HelloReply{Message: "GO gRpc服务的响应为: Hello " + in.Name}, nil
}
func main() {
lis, err := net.Listen("tcp", port)
fmt.Println(port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
6.服务端创建成功,我们在server文件夹下运行终端 输入命令启动服务
go run main.go
7.可以看到服务启动成功,我打印了一下端口号
8.我们可以初始化一个客户端,来看看服务端是否正常,在client文件夹下,添加main.go,代码如下
/*
@Time : 2020/5/25 15:01
@Author : wkang
@File : server
@Description:
*/
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"log"
"net"
pb "../helloworld&