grpc 哼哈二将,你值得拥有

news/2025/10/21 23:20:57/文章来源:https://www.cnblogs.com/JulianHuang/p/19156662

kong网关转发http服务,各大博主都已经聊包浆了。
kong网关原生支持代理gRPC请求,本文通过一个示例来记录通过kong网关管理gRPC服务,并且使用grpcbin和grpcurl哼哈二将来模拟和验证grpc服务能力。

kong网关核心的控制面实体:

  • service : 上游服务的抽象
  • route : 客户端请求被分流的规则
  • upstream (+ target): 支持负载均衡、健康检查
  • consumer: 用于标识使用API服务的外部客户端, 一般需要结合plugins来识别

我们首先忽略网关,搭建一个grpc点对点服务调用。

1. grpc点对点

grpc 是基于http2的高性能rpc框架,根据http2是否启用TLS演化出grpc和grpcs

docker run -it -d --rm -p 9000:9000 -p 9001:9001 moul/grpcbin
启动了grpc服务,占用端口9000和9001:

2025/10/21 06:21:09 listening on :9000 (insecure gRPC)
2025/10/21 06:21:09 listening on :9001 (secure gRPC + secure HTTP/2)

安装grpcurl,访问grpc服务:

grpcurl -v -d '{"greeting": "Kong!"}' \-plaintext localhost:9000 hello.HelloService.SayHello    或grpcurl -v -d '{"greeting": "Kong!"}' \-insecure localhost:9001 hello.HelloService.SayHello

参数解释如下:

  • plaintext: Use plain-text HTTP/2 when connecting to server (no TLS)
  • insecure: Skip server certificate and domain verification. (NOT SECURE!) Not
    valid with -plaintext option.

grpc点对点的结果如下:

1.1 grpc over http2

客户端创建grpc通道,内部会创建到服务器的HTTP/2连接,通道创建完后,就可以重用连接来发送多个到服务端的远程调用(多路复用),这些远程调用会映射为HTTP/2中的流, 远程调用中的消息以HTTP/2帧的形式进行发送,帧可能会携带一条gRPC 长度前缀的消息,也可能在 gRPC消息非常大的情况下,一条消息跨多帧。

简单的grpc一元调用形成的HTTP2帧序列:

1.2 gRPC 服务反射协议

你还可以使用

  • grpcurl -plaintext localhost:9000 list 查看所有grpc服务
  • grpcurl -plaintext localhost:9000 describe hello.HelloService.SayHello 查看某一个grpc服务接口
  • grpcurl -plaintext localhost:9000 describe .hello.HelloRequest 查看类型信息

这依托于gRPC服务反射协议:注册了一个服务(列出服务器上注册的grpc服务和方法)。btw既然网关做grpc反向代理,以上可换成网关服务地址。

listener, err := net.Listen("tcp", *insecureAddr)if err != nil {log.Fatalf("failted to listen: %v", err)}// create gRPC servers := grpc.NewServer()grpcbinpb.RegisterGRPCBinServer(s, &grpcbinhandler.Handler{})hellopb.RegisterHelloServiceServer(s, &hellohandler.Handler{})addsvcpb.RegisterAddServer(s, &addsvchandler.Handler{})abepb.RegisterABitOfEverythingServiceServer(s, abehandler.NewHandler())// register reflection service on gRPC serverreflection.Register(s)// servelog.Printf("listening on %s (insecure gRPC)\n", *insecureAddr)if err := s.Serve(listener); err != nil {log.Fatalf("failed to serve: %v", err)}

2. kong gateway脚手架代理grpc请求

grpc是基于http2的高性能rpc框架,本次须确保存在http2代理侦听器

kong github给出的docker-kong脚手架开放了8000-8002端口的服务, 但是无http2侦听器。

核心配置由配置proxy-listen或者变量变量KONG_PROXY_LISTEN决定。

http2: 允许客户端打开与Kong网关的HTTP2连接。
ssl: 要求通过该地址/端口进行的所有连接都必须启用TLS。

本次修改成: ${KONG_PROXY_LISTEN:-0.0.0.0:8000 http2,0.0.0.0:8443 ssl http2}

本例kong作为grpc代理服务器,可通过kong-manager或者admin-api建立grpc service 和grpc route。

需要注意:

本例的grpc服务是宿主机上9000端口的服务,本次网关容器内不可使用localhost表征宿主机,mac容器内宿主机标识是host.docker.internal

最后grpc走kong网关的验证脚本:

grpcurl -v -d '{"greeting": "Kong!"}'
-H 'kong-debug: 1' -plaintext
localhost:8000 hello.HelloService.SayHello 结果与点对点一致。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂字体文件

一文读懂字体文件这篇文章是从0到1自定义富文本渲染的原理篇之一,此外你还可能感兴趣: 更多内容欢迎关注公众号:非专业程序员Ping一文读懂字符与编码 一文读懂字符、字形、字体 一文读懂字体文件 从0到1自定义文字排…

解释这些 Solidity 智能合约的核心概念

我来详细解释这些 Solidity 智能合约的核心概念: 1. 合约生命周期 合约部署阶段 // 1. 合约创建 contract MyContract {// 2. 状态变量初始化uint256 public value;address public owner;// 3. 构造函数执行construct…

你的项目一团糟-不是你的错-是框架的锅

GitHub 主页 你的项目一团糟?不是你的错,是框架的“锅”!📂➡️🏛️ 每个程序员都经历过那个瞬间。你加入一个新项目,或者时隔半年重新打开一个自己写的项目,然后,你感到了那种熟悉的、令人窒息的混乱。🌪…

别再猜了-开始测量吧-一份实用的Web性能指南

GitHub 主页 别再猜了,开始测量吧:一份实用的 Web 性能指南 又是一年“黑五”,凌晨三点,我的手机像疯了一样尖叫起来。😱 不是闹钟,是监控警报。我们的主打电商服务,那个我们花了半年心血构建的系统,在流量洪…

你的错误处理一团糟-是时候修复它了-️

GitHub 主页 你的错误处理一团糟,是时候修复它了!🛠️ 我还记得那个让我彻夜难眠的 bug。一个支付回调接口,在处理一个罕见的、来自第三方支付网关的异常状态码时,一个Promise链中的.catch()被无意中遗漏了。结果…

[网络] [iproute2] tc: Linux 带宽限制(Token Bucket Filter 和 HTB)使用指南

[网络] [iproute2] tc: Linux 带宽限制(Token Bucket Filter 和 HTB)使用指南$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");参考:iproute2: 网络管理利…

C++编程练习

// 阿汪面前有两只盲盒,每只盒子打开都有两种可能:或者装了 X 克狗粮,或者是一只容量为 Y 克的狗粮储蓄盒。如果是狗粮,阿汪可以快乐地吃掉;如果是空储蓄盒,那就倒霉了,阿汪必须想办法找到狗粮把这只储蓄盒装满…

newDay14

1.做了几个Java的小练习,背背单词,写了一些英语作业,时间还是不太够 2.明天课就少了,继续往下学 3.自己c++还是太差了,java学得差不多就回去补c++

L07_在RuoYI项目中添加自己的接口并实现CRUD功能(轻松+AI版)

这里是废话部分 从来没有写过如此轻松的作业,上课两个多小时就听进去了几分钟的东西,这几分钟的东西还是操作,其他是半点都没入入脑,靠着这几分钟的东西,轻松的完成了作业的1/2。 在L06中折磨的看了三天的文档,大…

大二to大三暑假大三上前半学期总结

比赛,学习,刚谈上恋爱,可是然后呢?其实心态得到了比较大的改变,比大二下的时候好受了很多,可能是逐渐接收了事实了。 比较大的事情其实也没几个,第一是和同学一起去打了一个超算比赛 是并行应用挑战赛2025,去鄂…

带权拉格朗日中值定理的证明

带权拉格朗日中值定理:设 \(f(x)\) 在 \([a, b]\) 连续,且 \(g(x)\) 在 \([a,b]\) 可积且不变号(恒大于零或恒小于零),那么存在 \(c\in [a,b]\),使得 \[\int^b_af(x)g(x)\text{d}x = f(c)\int^b_ag(x)\text{d}x …

Linux 下将程序打包为安装包

对于 Linux 下的程序打包,个人首推 FPM 构建工具。它比 dpkg、rpmbuild 要好用的多(至少 2021 年那会如此),并且它同时支持 deb、rpm 等包格式。 以下回顾一下以前写过的安装包构建脚本: #!/bin/bash#-----------…

低代码如何推动企业敏捷创新与业务赋能

在创新驱动发展的时代,企业需要更快地响应市场变化,更灵活地调整业务策略。然而,传统的软件开发模式往往无法满足这种敏捷性要求。低代码技术的出现,正在改变这一现状,成为推动企业敏捷创新的重要力量。低代码与敏…

hevc解码器下载

如果你使用的是品牌电脑,那电脑重装系统后会自动下载,无需手动安装,连机械革命都会自动安装的 如果不是,那么直接下载最新版(本文截稿于2025/10/21) Microsoft.HEVCVideoExtensions_2.4.23下载 双击打开即可安装…

低代码如何成为企业数字化转型的加速器

在当今快速变化的商业环境中,企业数字化转型已从"选择题"变成了"必答题"。然而,传统软件开发模式的高成本、长周期,让许多企业在数字化转型的道路上步履维艰。这时,低代码技术应运而生,正以其…

2025.10.18 刷题

2025.10.18 刷题1. P14253 旅行(trip) 一眼,区间肯定到结尾 然后从后面扫,随便统计一下个数即可 2. P14254 分割(divide) 刚看很难 再看诈骗 发现限制是要求同等深度,然后最小的必须有两个 然后这个是个独立问题…

[网络] [iproute2] tc命令:Linux网络异常模拟(Network Emulation, netem)指南

[网络] [iproute2] tc命令:Linux网络异常模拟(Network Emulation, netem)指南$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 简介02 前提条件2.1…

删除链表的倒数第N个结点-leetcode

题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1:输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]示例 2: 输入:head = [1], n = 1 输出:[]示例 3: 输入:head = [1,2], n =…

NOI 八

根号分治?+吉司机/扫描线/单调栈A. 先考虑 unordered_map 暴力记录的做法,容易发现 LCM 太大了存不下,状态数也不可接受。 LCM 考虑质因数分解,发现 \(V=300\) ,\(>17\) 的质因数只会至多出现一次。 这样的质…

2025.10.21总结

今天继续看软考相关内容,今天复习了计算机网络相关知识,和程序设计语言基础,还有汇编语言,汇编语言太晦涩难懂了,看了一部分,例题跟着过了一下就过了,系统的学的话需要很长时间,这部分以做题为主吧。 目前也还…