gin上使用Grpc入门

要在Go中使用基于Gin的gRPC,你需要执行以下步骤:

  1. 安装gRPC:使用以下命令安装gRPC:

go get -u google.golang.org/grpc
shell复制代码
  1. 安装protoc-gen-go:使用以下命令安装protoc-gen-go插件,它用于将protocol buffer文件生成Go代码:

go get -u github.com/golang/protobuf/protoc-gen-go
shell复制代码
  1. 创建一个protocol buffer文件:创建一个.proto文件,定义你的gRPC服务和消息类型。例如,创建一个名为example.proto的文件,并在其中定义你的服务和消息类型:

syntax = "proto3";

package example;

service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
string name = 1;
}

message HelloResponse {
string message = 1;

}

 

protobuf复制代码

上述文件中的内容定义了一个名为example的包,并包含一个HelloService服务。在这个服务中,定义了一个名为SayHello的RPC方法,它接收一个HelloRequest消息作为输入,并返回一个HelloResponse消息作为输出。

HelloRequest消息包含一个name字段,类型为字符串,用于传递一个名称。

HelloResponse消息包含一个message字段,类型为字符串,用于传递一个消息。

  1. 生成Go代码:使用protoc命令生成Go代码。在命令行中运行以下命令:

protoc --go_out=plugins=grpc:. example.proto
shell复制代码

这将生成一个名为example.pb.go的Go文件,其中包含生成的gRPC代码。

  1. 创建一个基于Gin的gRPC服务器:创建一个Go文件,并使用以下代码创建一个基于Gin的gRPC服务器:

package main

import (
"context"
"example" //引入生成的Go代码
"github.com/gin-gonic/gin"
"google.golang.org/grpc"
"net/http"
"strconv"
)

func main() {
r := gin.Default()

// 创建一个gRPC连接
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
panic(err)
}
defer conn.Close()

// 创建一个gRPC客户端
client := example.NewHelloServiceClient(conn)

// 定义一个Gin路由
r.POST("/say-hello", func(c *gin.Context) {
name := c.PostForm("name")

// 调用gRPC服务
req := &example.HelloRequest{Name: name}
res, err := client.SayHello(context.Background(), req)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err})
return
}
c.JSON(http.StatusOK, gin.H{"message": res.Message})
})

// 启动Gin服务器
if err := r.Run(":8080"); err != nil {
panic(err)
}
}
go复制代码

此代码创建了一个名为say-hello的POST路由,它通过调用gRPC服务将请求转发到HelloService.SayHello方法,并返回响应。

  1. 启动服务器:在命令行中执行以下命令启动服务器:

go run main.go
shell复制代码

现在,你可以发送一个POST请求到http://localhost:8080/say-hello,并在请求的主体中包含一个name参数,服务器将将其转发到gRPC服务,并返回相应的消息。

posted @ 2023-10-05 20:41  技术颜良  阅读(525)  评论(0编辑  收藏  举报