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

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

项目结构

image.png

demo包

两个文件均为protoc-gen-go-grpc自动生成
构成一个完整的 gRPC 服务的定义和实现

democlient包

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

image.png

  • 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

image.png

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

internal包

config/config.go

image.png
zrpc结构体源码如下
image.png

logic/pinglogic.go

image.png

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

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

image.png

  • 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

image.png
创建返回svc结构体实例

demo.proto

image.png
用于生成不同语言的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

image.png

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

启动

image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/322860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识付费saas租户平台:揭秘成功的密码

明理信息科技知识付费saas租户平台 随着互联网的快速发展,人们越来越重视知识的获取和价值的挖掘。在这个信息爆炸的时代,知识付费已经成为了一种新的商业模式,为知识的传播和价值的转化提供了更加高效和便捷的途径。本文将探讨知识付费的发…

UI设计入门:解析用户界面的基础概念

UI设计是什么:用户界面设计的基础 用户的视觉体验。一个好的用户界面需要强大、可靠和良好的使用感。用户界面设计应尽量减少用户与产品互动的能量,使用户更容易实现目标。 以我们最熟悉的应用程序界面为例。通常,手机软件的UI用户界面设计…

LeetCode刷题---基本计算器

解题思路: 根据题意,字符串中包含的运算符只有和- 使用辅助栈的方法来解决该问题 定义结果集res和符号位sign(用于判断对下一数的加减操作),接着对字符串进行遍历。 如果当前字符为数字字符,判断当前字符的下一个字符是否也是数字字符&#x…

样式集-发布,发表页面完整代码及示意图

发表页面完整代码示意图 完整代码 wxml代码&#xff1a; <!--pages/publish/publish.wxml--> <view class"biaoqing" catchtap"showEmoji"><text>&#x1f60a;</text></view> <view class"fabiao" catchtap…

Jmeter分布式性能测试

在做后端服务器性能测试中&#xff0c;我们会经常听到分布式。哪你&#xff0c;是否了解分布式呢&#xff1f;今天&#xff0c;我们就来给大家讲讲&#xff0c;在企业实战中&#xff0c;如何使用分布式进行性能测试&#xff0c;实战过程中&#xff0c;又有哪些地方要特别注意&a…

引领安全创新 | 安全狗方案入选工信部《2023年工业和信息化领域数据安全典型案例名单》

近日&#xff0c;工业和信息化部网络安全管理局公布了2023年工业和信息化领域数据安全典型案例名单。 安全狗与厦门卫星定位应用股份有限公司、中移 (上海) 信息通信科技有限公司联合申报的智慧交通云数据安全与隐私保障典型案例也成功入选。 厦门服云信息科技有限公司&#xf…

感知器学习算法和Adaline规则

一.感知器的发展过程 感知器的发展可以追溯到20世纪50年代。它是一种简单的人工神经网络模型&#xff0c;最早由美国心理学家和计算机科学家弗兰克罗森布拉特&#xff08;Frank Rosenblatt&#xff09;于1957年提出。感知器的设计灵感来源于生物神经元的工作原理&#xff0c;旨…

Oracle全系列版本官网下载保姆及教程

Oracle全系列版本官网下载方法 下面以下载Oracle12cR2为例说明下载的整个过程。 基本步骤如下&#xff1a; 先注册一个Oracle账号并登录&#xff1b;进入到客户下载页面搜索要下载的数据库版本&#xff1b;得到Oracle下载器(Oracle_SSN_DML_xxxxx.exe)&#xff0c;注意&#xf…

Docker之Dockerfile构建镜像

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Docker之Dockerfile构建镜像》。&#x1f3af;&…

Shiro框架:ShiroFilterFactoryBean过滤器源码解析

目录 1.Shiro自定义拦截器SpringShiroFilter 1.1 ShiroFilterFactoryBean解析 1.1.1 实现FactoryBean接口 1.1.2 实现BeanPostProcessor接口 1.2 SpringShiroFilter解析 1.2.1 OncePerRequestFilter过滤逻辑实现 1.2.2 AbstractShiroFilter过滤逻辑实现 1.2.2.1 创建Sub…

网页测试遇到自动弹窗,Alert类无法处理?或许你该来学学这招了!

相信大家在使用selenium做网页自动化时&#xff0c;会遇到如下这样的一个场景&#xff1a; 在你使用get访问某一个网址时&#xff0c;会在页面中弹出如上图所示的弹出框。 首先想到是利用Alert类来处理它。 然而&#xff0c;很不幸&#xff0c;Alert类处理的结果就是没有结果…

矩阵快速幂算法总结

题目链接 活动 - AcWing 本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1305/ 题解 代码 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;type…

如何创作出优秀的电子邮件营销(EDM)?

EDM出现的时间很早&#xff0c;是非常传统的一种推广方式。即便是其他推广方式的蓬勃兴起&#xff0c;EDM依旧深受很多行业的喜爱。主要源于它极高的性价比&#xff0c;据可靠数据&#xff0c;EDM的投资回报比达1&#xff1a;48。 那一封优秀的EDM应该是怎么样的呢&#xff1f;…

一分钟带你了解--电商控价

电商行业发展至今带来了许多机遇&#xff0c;但同时也伴随着一些挑战。品牌电商在运营过程中&#xff0c;面临着诸如乱价、低价、窜货和假货等问题&#xff0c;这些问题不仅损害了品牌的形象和价值&#xff0c;也破坏了市场秩序&#xff0c;侵害了消费者的权益。 电商控价是解…

恒温器探针样品座

恒温器探针样品座是一种用采用可移动探针完成恒温器电缆和被测样品的电学连接&#xff0c;避免了每次样品电引线的焊接&#xff0c;探针可移动&#xff0c;5mm--20mm大小的样品均可适用&#xff0c;探针可以安装6个&#xff0c;标准配置探针数量为4个。 恒温器探针样品座由T型…

深入理解 go reflect - 反射基本原理

反射概述 反射是这样一种机制&#xff0c;它是可以让我们在程序运行时&#xff08;runtime&#xff09;访问、检测和修改对象本身状态或行为的一种能力。 比如&#xff0c;从一个变量推断出其类型信息、以及存储的数据的一些信息&#xff0c;又或者获取一个对象有什么方法可以…

map和set使用讲解

map的使用 map的介绍 map是C STL&#xff08;标准模板库&#xff09;中的一个关联容器。 它提供了一种有序的键值对存储方式&#xff0c;其中每个元素都由一个键和一个值组成。 map中的元素根据键的值自动进行排序&#xff0c;并且通过键快速访问对应的值。 map使用红黑树数…

SD-WAN解决跨国公司海外工厂网络安全问题

在跨境业务蓬勃发展的今天&#xff0c;越来越多的大型企业出于人力成本的考虑&#xff0c;在人力成本较低的发展中国家建立工厂。然而&#xff0c;传统基于路由器的网络架构已无法为这些跨国企业提供可靠的安全网络。那么&#xff0c;如何解决跨国企业海外工厂的网络难题呢&…

Structured_Streaming和Kafka整合

结构化编程模型 输出终端/位置 默认情况下&#xff0c;Spark的结构化流支持多种输出方案&#xff1a; 1- console sink: 将结果数据输出到控制台。主要是用在测试中&#xff0c;并且支持3种输出模式 2- File sink: 输出到文件。将结果数据输出到某个目录下&#xff0c;形成文…

数据绑定,defineProperty,v-on,事件处理

目录​​​​​​​ v-bind单向数据绑定 defineProperty 是v-on的简写 事件处理 v-bind单向数据绑定 从name绑定到v-bind到value单向数据绑定&#xff1a; <input type"text" :value"name"> <input type "text" v-model"na…