gRPC-Gateway 快速实战
今天来分享一波 gRPC-Gateway , 之前咱们有分享过什么是 gRPC 及其使用方式,可以看看这些关于 gRPC 的历史文章:
- gRPC介绍
- gRPC 客户端调用服务端需要连接池吗?
- gRPC的拦截器
- gRPC的认证
- 分享一下 gRPC- HTTP网关 I
今天主要是分享关于 gRPC-Gateway 的实战部分,文章大体分为如下几个部分:
- gRPC-GateWay 简单原理介绍
- 基本环境创建
- gRPC-GateWay 实战
gRPC-GateWay 简单原理介绍
如下是官网的一张基本原理图
gRPC-Gateway 是一个协议插件,它读取一个 gRPC 服务定义,并生成一个反向代理服务,它将一个 RESTful JSON API 转换为 gRPC ,这个服务器是根据gRPC定义中的自定义选项生成的。
简单来说,咱们的 gRPC-Gateway 能做到的事情就是:
能够提供 RESTful JSON API 接口,并且请求通过 http 接口打进来,gRPC-Gateway 能够将其请求转给 grpc 服务,最终 grpc 服务进行处理并响应
接下来,我们就来看看 gRPC-Gateway 是如何同时提供 http 接口和 grpc 服务的
基本环境创建
使用 gRPC-Gateway ,我们需要搭建基本的环境,正如之前我们实战 grpc 的时候,需要搭建一个基本的 grpc 环境,总的来说需要做如下事项:
- 开始创建自己的项目目录
mkdir my_grpcgateway
cd my_grpcgateway
mdkir protoc/order
cd protoc/order
- 下载 gRPC-Gateway 的依赖
$ go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
$ go get google.golang.org/protobuf/cmd/protoc-gen-go
$ go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
- 检查工具,执行完第二步之后,我们可以看到咱们将 gRPC-Gateway 的依赖库和工具都下载下来了,咱们可以看到在我们的 GOPATH 目录下有如下工具
- protoc-gen-go
- protoc-gen-grpc-gateway
- protoc-gen-go-grpc
- protoc
- 将依赖库的 google/api 拷贝到咱们的 order 目录下
这个时候我们主要是后续实战会使用库里面的 annotations.proto ,他的作用就是将 HTTP 映射成 gRPC,目录是这样的
google/
├── api
│ ├── annotations.proto
│ ├── httpbody.proto
│ └── http.proto
例如我的 GOPATH 在 “/root/go” ,因此我们可以这样来复制
cp /root/go/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.16.0/third_party/googleapis/google/api/ ./
接下来就可以进入到实战部分了,目前,我们的目录是这样的
my_grpcgateway/
├── protoc
│ └── order
│ ├── google
│ │ ├── api
│ │ │ ├── annotations.proto
│ │ │ ├── httpbody.proto
│ │ │ └── http.proto
gRPC-GateWay 实战
来到实战部分,先说一下咱们的需求:
- 咱们客户端通过请求服务端接口,查询订单信息
这个时候,其实我们只需要走如下 3 步骤即可
- 编写 proto 文件
- 用工具生成相应的代码
- 填写相应的代码逻辑即可
编写 proto 文件
在上述的 my_grpcgateway/protoc/order 下 创建 文件 order.proto
cd my_grpcgateway/protoc/order
vim order.proto
编写 order.proto 文件的时候我们导入了annotations.proto 文件 import "google/api/annotations.proto";
另外,我们在编写 proto 的时候,现在多定义了一个 Service
service Order {rpc GetOrderInfo (GetOrderReq) returns (GetOrderRsp) {option (google.api.http) = {post: "/v1/order/getorder"body: "*"};};
}
那通过我们写的 order.proto 文件,我们知道,咱们定义的
- HTTP 接口是 POST /v1/order/getorder
- gRPC 接口是 GetOrderInfo
用工具生成相应的代码
protoc -I ./ \--go_out ./ --go_opt paths=source_relative \--go-grpc_out ./ --go-grpc_opt paths=source_relative \--grpc-gateway_out ./ --grpc-gateway_opt paths=source_relative \./order.proto
我们生成的文件存放目录都是当前目录,使用 protoc 工具生成代码后,我们可以看到 order 目录下是这样的
# ls
google order_grpc.pb.go order.pb.go order.pb.gw.go order.proto
这个时候,其实我们本次最关注的是 order.pb.gw.go 文件的生成
填写相应的代码逻辑即可
那这个时候,我们就可以创建代码文件来实现上述的 gRPC 接口,以及初始化 gRPC 服务和 gRPC-Gateway 的反向代理了
- 在 my_grpcgateway 目录下创建 main.go
- 在 my_grpcgateway 下创建 server 目录,并在 server 目录下编写 server.go
mkdir server
cd server
vim server.go
server.go
- 回到 my_grpcgateway ,创建 mod,拉依赖包,并运行代码
go mod init mytest
go mod tidy
go run main.go
这个时候,我们可以看到 6666 端口,和 9999 端口都被服务监听着,此时我们来请求 9999 的 HTTP 端口,如下:
服务端已经启动:
客户端可以使用 postman 来请求接口:
当然也可以在 linux 里面使用 curl 来请求接口
curl -X POST -d '{"tid":"0001-000001", "tenant_name":"test tenant", "order_id":"1000-1000001"}' http://localhost:9999/v1/order/getorder
写在最后
至此,我们从 gRPC-Gateway 的基本原理到快速实战,相信 xdm 能够有一定的收获吧,赶紧动起手来实战一波,并加入自己的想法变着花样的去玩他
使用 gRPC-Gateway 可以极大的提高我们的效率,直接实现 grpc 服务接口也可以提供 http 接口出去
下一篇,将会是 gRPC-Gateway Swaager 相关,能够让我们提供出去的接口更加友好和方便
项目代码可以查看地址:https://github.com/qingconglaixueit/my_grpcgateway_demo
感谢阅读,欢迎交流,点个赞,关注一波 再走吧
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI
相关文章:

gRPC-Gateway 快速实战
今天来分享一波 gRPC-Gateway , 之前咱们有分享过什么是 gRPC 及其使用方式,可以看看这些关于 gRPC 的历史文章: gRPC介绍 gRPC 客户端调用服务端需要连接池吗? gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分…...
〔019〕Stable Diffusion 之 单图中绘制多人分区域写提示词 篇
✨ 目录 🎈 下载区域绘制插件🎈 区域绘制使用🎈 参数讲解和基础使用🎈 Lora 自组🎈 Lora 自组的使用🎈 分区扩散🎈 分区域提示🎈 下载区域绘制插件 在绘制图片时,经常绘制的图片不仅仅是 单人图片,也可能需要绘制 多人图片那么通过正常方式绘制出来的多人图片…...

Scala入门,idea关联Scala
Scala 介绍 Scala是一种多规范的编程语言,它结合了面向对象编程(OOP)和函数式编程(FP)的特征,Scala的名字源于”Scalable language“,意为”可伸缩语言“。2003年开发的,并在JVM&a…...

3DCAT携手华为,打造XR虚拟仿真实训实时云渲染解决方案
2023年5月8日-9日,以 因聚而生 众志有为 为主题的 华为中国合作伙伴大会2023 在深圳国际会展中心隆重举行。本次大会汇聚了ICT产业界的广大新老伙伴朋友,共同探讨数字化转型的新机遇,共享数字化未来的新成果。 华为中国合作伙伴大会2023现场&…...

Spring Security注销后未正确保存空的SecurityContext漏洞CVE-2023-20862
文章目录 0.前言漏洞Spring Security介绍 1.参考文档2.基础介绍3.解决方案3.1. 升级版本3.2. 临时替代方案 4.Spring Security使用教程简单代码示例 0.前言 背景:公司项目扫描到 Spring-security 组件 注销后未正确保存空的SecurityContext CVE-2023-20862 漏洞 高…...

11、监测数据采集物联网应用开发步骤(8.2)
监测数据采集物联网应用开发步骤(8.1) 新建TCP/IP Client线程类com.zxy.tcp.ClientThread.py #! python3 # -*- coding: utf-8 -Created on 2017年05月10日 author: zxyong 13738196011 import datetime import socket import threading import timefrom com.zxy.adminlog.Us…...

【PWN · ret2text | RISC-V异构】[2023 羊城杯]login
第一道异构PWN的题目,没做出来。。。。但是是因为工具没有 QAQ 目录 前言 一、食用工具 Ghidra 安装使用 二、解题思路 三、exp 总结 前言 我们context.arch经常是i386和amd64,突然遇到RISC-V架构的题目,一是本地运行不了(…...
【HBZ分享】TCP可靠性传输如何保证的?以及传输优化之Nagle算法
ACK机制 ACK机制是发送方与接收方的一个相互确认客户端向服务端发送连接请求,此时服务端要回馈给客户端ACK,以表示服务端接到了客户端请求,这是第一和的第二次握手客户端接收到服务端响应后,同样也要回馈服务端的响应,…...

智能电销机器人,主要体现的价值是什么
21世纪科技的迅速发展,人工智能逐渐走入大家的视线,越来越多的机器人出现在我们生活中。见的最多的有电销公司的智能语音机器人、在仓库拣货打包的机器人、商场店铺供娱乐对话的机器人。机器人活跃在各行各业中,降低了人工成本,代…...

Win7系统电脑开机总出现硬盘自检的简单解决方法
你是不是经常会遇到电脑开机进行硬盘自检,而且每次开机都检查很久不能跳过;怎么才能跳过这一步骤呢?下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤,加快开机时间。 解决步骤: 1、按下“Win R”快捷键…...

计网第四章(网络层)(五)
目录 静态路由配置 默认路由: 特定主机路由: 示例: 广播域和冲突域: 静态路由配置 在第四节(计网第四章(网络层)(四)_永无魇足的博客-CSDN博客)有提到过…...
ios 手机浏览器,点击输入框页面会放大
一个普通的h5静态页面,在ios手机上用浏览器打开,发现每次聚焦输入框的时候整个页面都会放大! 解决办法在html的头部meta标签中设置 user-scalableno viewport meta 标记 - HTML(超文本标记语言) | MDN...
全局异常处理
案例一: 自定义异常 public class StudentException extends RuntimeException {private Integer code;private String msg;public StudentException(Integer code, String msg) {this.code code;this.msg msg;}/*** 这里需要重写 getMessage方法,否…...

更健康舒适更科技的照明体验!SUKER书客护眼台灯 L1上手体验
低价又好用的护眼台灯是多数人的需求,很多人只追求功能性护眼台灯,显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到,然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯,拥有高品质光源ÿ…...

Locked勒索病毒:最新变种.locked袭击了您的计算机?
导言: 在今天的数字时代,勒索病毒已经不再是仅仅让数据变得不可访问的小威胁。 .locked 勒索病毒,作为其中的一种,以其高度复杂的加密算法和迅速变化的攻击手法而备受恶意分子喜爱。本文91数据恢复将带您深入了解 .locked 勒索病毒…...

随机森林算法
介绍 随机森林是一种基于集成学习的有监督机器学习算法。随机森林是包含多个决策树的分类器,一般输出的类别是由决策树的众数决定。随机森林也可以用于常见的回归拟合。随机森林主要是运用了两种思想。具体如下所示。 Breimans的Bootstrap aggregatingHo的random …...

如何将国标规范用EndNote插入到英文期刊中,自定义文献插入指南
EndNote自定义文献 1.插入国标JTG 2034-2020这种新建一个StandardReference填入信息参考 插入英文期刊规范ASTM 1.插入国标JTG 2034-2020这种 首先找到大家要投稿的英文期刊,然后去找那些中…...

重写 UGUI
重写Button using UnityEngine; using UnityEngine.UI; public class MyButton : Button {[SerializeField] private int _newNumber; }using UnityEditor;//编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor&q…...

合宙Air724UG LuatOS-Air LVGL API控件--容器 (Container)
容器 (Container) 容器是 lvgl 相当重要的一个控件了,可以设置布局,容器的大小也会自动进行调整,利用容器可以创建出自适应成都很高的界面布局。 代码示例 – 创建容器 cont lvgl.cont_create(lvgl.scr_act(), nil) lvgl.obj_set_auto_re…...
代码随想录训练营第41天|343.整数拆分,96.不同的二叉搜索树
代码随想录训练营第41天|343.整数拆分,96.不同的二叉搜索树 343.整数拆分文章思路代码 96.不同的二叉搜索树文章思路代码 总结 343.整数拆分 文章 代码随想录|0343.整数拆分 思路 二刷不难 d p [ i ] M a x j ( m a x ( j 1 , d p [ j ] ) ∗ ( i − j ) ) \…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...