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 别名: 定义了 Request 和 Response 两个别名,实际上是从 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 服务,监听指定的地址

启动


相关推荐
超级架构师20 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
我就是全世界1 天前
OpenCode Go 套餐划算吗:先看你用哪个模型
开发语言·后端·golang
微三云 - 廖会灵 (私域系统开发)1 天前
企业级 SaaS 系统架构设计:单体、微服务还是模块化单体?技术选型实战
微服务·架构·系统架构
小杨互联网1 天前
Go 现代 CLI 工具离线镜像合集
开发语言·后端·golang·开源·go·命令行
shuair1 天前
Spring Cloud 微服务脚手架:Simple Cloud 系统架构设计
spring cloud·微服务·系统架构
小此方1 天前
C++ 工程组件与基础设施(三)详解RPC服务的概念与安装,图片介绍Brpc服务器和客户端的搭建过程
服务器·c++·rpc
microrain1 天前
跟着一条属性报文走一遍 SagooIoT 的接入链路
物联网·架构·golang·sagooiot
CodeGL1 天前
微服务框架——go-zero
微服务·架构·golang
草莓熊Lotso1 天前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
阿俊-全栈开发2 天前
LikeShop 多商户 Java 版商城微服务模块拆分与部署架构演进实践
java·微服务·架构·likeshop开源商城·多商户源码