GoZero微服务个人探索之路(三)Go-Zero官方rpc demo示例探究

官方网址:https://go-zero.dev/docs/tasks/cli/grpc-demo

项目结构

demo包

两个文件均为protoc-gen-go-grpc自动生成

构成一个完整的 gRPC 服务的定义和实现

democlient包

demo.go goctl生成的客户端代码

  • Request 和 Response 别名: 定义了 RequestResponse 两个别名,实际上是从 demo 包中导入的对应的消息类型。
  • Demo 接口: 定义了一个 Demo 接口,其中包含了调用 gRPC 服务中 Ping 方法的方法声明。
  • defaultDemo 结构体: 实现了 Demo 接口,包含一个 zrpc.Client 类型的字段,用于与 gRPC 服务建立连接。
  • NewDemo 函数: 用于创建并返回 Demo 接口的实例,需要传入一个 zrpc.Client 类型的参数,用于建立连接。
  • Ping 方法:Demo 接口中的实际方法,通过 defaultDemo 结构体的实例调用 gRPC 服务中的 Ping 方法。

etc包

demo.yaml

  • Name:demo.rpc 服务名称
  • ListenOn:0.0.0.0:8080 指定服务监听的地址和端口
  • Mode:dev 服务运行在开发模式 (dev)

internal包

config/config.go

zrpc结构体源码如下

logic/pinglogic.go

  • **PingLogic 结构体:**包含了处理 gRPC 请求的上下文、服务上下文以及日志记录器
  • NewPingLogic 函数: 创建并返回 PingLogic 结构体的实例,初始化了上下文和服务上下文,并通过 logx.WithContext 方法创建了与上下文关联的日志记录器
  • Ping 方法: 是处理 gRPC 请求的具体逻辑方法。接收一个 demo.Request 类型的参数 in ,并返回一个 *demo.Response 类型和一个 error

server/demoserver.go 由goctl生成的grpc服务端代码

  • DemoServer 结构体: 实现 demo.UnimplementedDemoServer 接口,表示该结构体用于处理 gRPC 请求,包含了一个 svcCtx 字段--指向 svc.ServiceContext 结构体的指针
  • NewDemoServer 函数: 用于创建并返回 DemoServer 结构体的实例
  • Ping 方法:DemoServer 处理 gRPC 请求的具体方法。它接收一个上下文 ctx 和一个 demo.Request 类型的参数 in ,并返回一个 *demo.Response 类型和一个 error 。在这个方法中,它创建了一个 logic.NewPingLogic 实例,然后调用了 l.Ping(in) 方法,将请求交由具体的业务逻辑处理。

svc/servicecontext.go

创建返回svc结构体实例

demo.proto

用于生成不同语言的gRPC代码

  • syntax = "proto3";: 指定使用 protobuf 3 语法
  • package demo;: 指定生成的 Go 代码的包路径
  • option go_package="./demo";: 指定生成的 Go 代码的包路径
  • message Request: 定义了一个消息类型 Request,其中包含一个字符串字段 ping
  • message Response: 定义了一个消息类型 Response,其中包含一个字符串字段 pong
  • service Demo: 定义了一个服务接口 Demo,包含一个 Ping 方法,该方法接收 Request 消息作为参数,并返回 Response 消息

--- string pong = 1; 不代表值为1,代表他的编号为1(protobuf语法

demo.go

  • 加载配置文件: 使用 flag 包解析命令行参数,获取配置文件路径,并通过 conf.MustLoad 加载配置信息到结构体 c
  • 创建服务上下文: 使用 svc.NewServiceContext 创建服务上下文,将配置信息传递给服务上下文
  • 创建 gRPC 服务: 使用 zrpc.MustNewServer 创建 gRPC 服务,同时注册了 Demo 服务。如果是开发或测试模式,还注册了 gRPC 服务反射服务,以方便 gRPC 工具的使用
  • 启动 gRPC 服务: 使用 s.Start() 启动 gRPC 服务,监听指定的地址

启动


相关推荐
进击的程序猿~13 小时前
Go Interface源码深度解析指南
开发语言·后端·golang
星期一研究室16 小时前
从“能看”到“爱看”:用色彩心理学打造人人爱看的的专业文档🧩
微服务·产品·设计
—Qeyser16 小时前
Sponge 脚手架快速创建后端API及接口使用完整教程
golang
重庆小透明17 小时前
深入探寻微服务【第三篇微服务的组件】
运维·微服务·架构
不爱洗脚的小滕17 小时前
【Golang】Go 语言实现高可用、用户态感知与多端广播的服务端 SSE 架构
开发语言·架构·golang
报错小能手17 小时前
Go 简介
开发语言·后端·golang
golang学习记1 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
过客随尘1 天前
网关扩容了,流量却还是打不过去?企业级 Spring Cloud Gateway 生产动态化部署实战
spring cloud·微服务·架构
cfm_29141 天前
基于OAuth2.0实现微服务SSO单点登录
后端·spring·微服务·架构