创建 Golang gRPC 服务:分步教程
本教程使您能够了解和学习 Golang gRPC 服务。使用 Go 编程语言,获取创建 gRPC(Google Remote Procedure Call)的分步要点。
gRPC 简介
让我们首先了解什么是 gRPC。
gRPC 是一个高性能的远程过程调用 RPC 框架,由 Google 提供。它是开源的,支持通过传输协议 HTTP2 进行客户端-服务器通信。
在 Golang 中,gRPC 是通过使用协议缓冲区和代码生成来实现的,它提供了一种快速高效的方式来构建客户端-服务器应用程序。
总的来说,有两种创建 Web 服务的方式,Rest API 和 RPC。让我们了解一下两者之间的区别。
gRPC 与 REST
gRPC 和 RESTful API 是构建 Web 服务的不同方式。
gRPC 旨在比 RESTful API 更快、更高效,它使用称为 Protocol Buffers 的二进制数据格式,而不是 JSON 等基于文本的格式。而 RESTful API 更灵活并且允许更容易的版本控制,使它们成为需要频繁更改的 Web 应用程序的不错选择。
gRPC 的规则也更加严格,需要开发人员提前定义接口,这有助于错误检查和数据验证。
总的来说,gRPC 非常适合两个微服务之间的内部通信,对于必须快速高效的高性能应用程序来说是一个不错的选择。但是,RESTful API 是需要更高灵活性和频繁更新的应用程序的更好选择。
当我们使用 gRPC 继续使用 gRPC 创建 Web 服务时,让我们关注最重要的好处,即使用 Protocol Buffers 序列化数据。
在 Golang 中构建云原生 gRPC 服务可能是一项艰巨的任务,
不要浪费您的时间和资源自己动手。从我们这里聘请 Golang 开发人员,以获得满足您需求的可靠且可扩展的解决方案。
Golang gRPC 中的协议缓冲区
protocol buffer 俗称 protobuf,是 gRPC 使用的一种数据序列化(与编程语言无关)格式。它是一种将结构化数据序列化为二进制格式的紧凑而高效的方法,然后可以通过网络发送或存储在磁盘上。
在 Golang 中,协议缓冲区是在 .proto 文件中使用特殊语法定义的,然后将其编译成可用于反序列化或序列化数据的 Go 代码。从 .proto 文件生成的 Go 代码提供了对数据的类型安全访问,并使其易于使用。
Protocol Buffers 是 gRPC 的一个关键特性,因为它们提供高效的数据序列化和反序列化,这对于高性能网络通信至关重要。它们还使开发人员能够使用 IDL 为其服务定义严格的接口,这有助于确保系统的不同组件能够正确地相互通信。
我们将看到构建Golang gRPC服务的示例。
Golang gRPC 示例的先决条件
由于您希望使用 gRPC Golang 创建远程过程调用 Web 服务,因此这里列出了您必须熟悉并已安装在系统中的内容。
协议编译器
对于Ubuntu:
对于 macOS:
创建 Golang gRPC 服务器的指导教程
要使用 gRPC 和 Go 语言创建 Web 服务,我们将遵循以下步骤:
创建原型文件
将 Proto 文件转换为 Go 文件
继承gRPC接口
创建客户端调用服务
第 1 步:创建原型文件
创建一个原始文件名问候.proto
语法=“proto3”;选项 go_package = "/pb";服务问候服务{
rpc Greeting(GreetingServiceRequest) 返回 (GreetingServiceReply) {}}消息 GreetingServiceRequest {
字符串名称 = 1;}消息 GreetingServiceReply {
字符串消息 = 2;}
第 2 步:将 Proto 文件转换为 Go 文件
现在我们需要将这个 proto 文件转换成 Go 文件
protoc <proto-file-path> --go_out=<输出文件路径> --go-grpc_out=<输出文件路径>protoc *.proto --go_out=./ --go-grpc_out=./
执行以上命令后,我们可以看到在pb目录下生成了两个文件
在greeting_grpc.pb.go, 一个接口是自动生成的
第 3 步:继承 gRPC 接口
现在我们需要继承并实现上面的接口。
包主进口 (
“语境”
“调频”
“grpc-golang/pb”
“日志”
“网”
“google.golang.org/grpc”)输入服务器结构{
pb.GreetingServiceServer}func (s *server) Greeting(ctx context.Context, req *pb.GreetingServiceRequest) (*pb.GreetingServiceReply, error) {
返回 &pb.GreetingServiceReply{
消息:fmt.Sprintf("Hello, %s", req.Name),
}, 无}功能主要(){
监听器,错误 := net.Listen("tcp", ":8080")
如果错误!=无{
恐慌(错误)
}
s := grpc.NewServer()
pb.RegisterGreetingServiceServer(s, &server{})
如果错误:= s.Serve(监听器);错误!=无{
log.Fatalf("服务失败: %v", err)
}}
我们用 server struct 实现了接口方法
func (s *server) Greeting(ctx context.Context, req *pb.GreetingServiceRequest) (*pb.GreetingServiceReply, error) {
返回 &pb.GreetingServiceReply{
消息:fmt.Sprintf("Hello, %s", req.Name),
}, 无}
并向问候服务器注册服务器结构
现在我们可以使用go run server.go启动我们的服务器文件
第 4 步:创建客户端调用服务
服务器启动后,我们需要编写客户端来调用问候语方法。
包主进口 (
“语境”
“调频”
“grpc-golang/pb”
“日志”
“google.golang.org/grpc”)功能主要(){
选择 := grpc.WithInsecure()
cc, err := grpc.Dial("localhost:8080", 选择)
如果错误!=无{
log.Fatal(错误)
}
推迟 cc.Close()
客户端 := pb.NewGreetingServiceClient(cc)
请求:= &pb.GreetingServiceRequest {名称:“地鼠”}
resp, err := client.Greeting(context.Background(), 请求)
如果错误!=无{
log.Fatal(错误)
}
fmt.Printf("接收响应 => %s ", resp.Message)}
这里我们使用相同的自动生成文件来创建请求和调用问候方法
客户端 := pb.NewGreetingServiceClient(cc)请求:= &pb.GreetingServiceRequest {名称:“地鼠”}resp, err := client.Greeting(context.Background(), 请求)如果错误!=无{
log.Fatal(错误)}
至此,我们结束了本教程。您可以在我们的GitHub 存储库中找到整个教程。
结论
通过学习本教程,您现在对如何在 Go 中使用 gRPC 构建高性能、可扩展和高效的微服务有了基本的了解。有了这些知识,您就可以开始构建自己的 Golang gRPC 服务,并利用这个现代 RPC 框架的优势。
查看我们的其他Golang 教程,了解有关类似查询和其他查询的更多信息。
(言鼎科技)