Paul Paul Public Builder & 全栈工程师
search
arrow_back 返回标签拓扑

Grpc

共 3 篇。

2026-08-15 · 约 1 分钟

gRPC 拦截器链与 Context 传递

gRPC 的拦截器(Interceptor)是 AOP 思想的典型应用:客户端/服务端各一条链,按注册顺序嵌套执行。 客户端拦截器适合做:鉴权头注入、调用埋点、重试包装 服务端拦截器适合做:统一异常翻译、限流、审计日志 Context 通过 Contexts.interceptCall 显式传递,异步回调里记得 attach,否则 trace 会断 这条结论在项目里验证过多次,标记为常青。

阅读全文 arrow_forward
newest_tech 2022-06-19 · 约 2 分钟

从零开始学gRPC(二)

前言 gRPC的大致功能点相信大家一定已经有些了解。但是,在日常开发中我们很少会使用原生的gRPC,更多的是希望gRPC能集成到现有应用的开发环境中。这篇文章会围绕如何以简单的方式将gRPC集成到SpringBoot展开讲解。 快速搭建 环境准备 操作系统:Windowns JDK版本:1.8 编辑工具:IntelliJ IDEA Community Edition 2021.1.2 x64 框架选型 目前开源切比较热门的grpc和SpringBoot整合框架有两种可选方案。分别是LogNet 和 yidongnan 。(这两者稍微有些区别,在最后我会有个对比) 这里我使用后者作为demo演示。 创建项目 自己创建一个maven项目就好,没有别的要求(All in one,暂时不需要分模块)。想要偷懒的同学也可以借鉴之前的项目 ,但是我建议自己动手尝试搭建比较好。 MAVEN依赖 注意:我只列出了关键依赖。而且注册中心选用的是zookeeper,要注意zookeeper的版本,可以参考 这里 。 xml content_copy 复制代码 <dependencies> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-spring-boot-starter</artifactId> <version>2.13.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.6.8</version> </dependency> <!-- spring-cloud-zookeeper-starter--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <version>3.1.2</version> </dependency> </dependencies> 配置 yaml content_copy 复制代码 server: port: 8081 spring: application: name: demo-grpc cloud: zookeeper: connect-string: localhost:2181 grpc: client: greeterService1: address: discovery:/demo-grpc negotiationType: PLAINTEXT server: port: 9091 这个地方的 negotiationType要注意点(不设置的话需要对客户端传输进行加密)

阅读全文 arrow_forward
newest_tech 2022-06-09 · 约 3 分钟

从零开始学gRPC(一)

前言 gRPC作为当前最热门的RPC框架之一,以其独特的跨语言、跨平台特性,赢得许多公司的青睐。 老实说,之前我只是道听途说并没有认真去研究,今天我会根据官网的demo展开介绍整个gRPC的功能, 后面一篇会介绍gRPC如何整合到SpringCloud。 我这里只提供了搭建demo工程的资料,建议自己动手来操作。没有截图项目也是因为官方的资料相当齐全,没必要重复造轮子。 gRPC总览 在直接使用gRPC之前,我们先了解下它的所有特性。官方描述 我就不展开讲了,gRPC有以下几点主要功能: 使用Protocol Buffer 定义服务。 语言和平台的中立性 双向流式通讯 基于HTTP2.0身份认证、SLB、tracing、health check 组件可扩展。 快速搭建 环境准备 操作系统:Windowns JDK版本:1.8 编辑工具:IntelliJ IDEA Community Edition 2021.1.2 x64 创建项目 自己创建一个maven项目就好,没有别的要求(All in one,暂时不需要分模块)。想要偷懒的同学也可以借鉴我的项目,这里 已经给你准备好了。 但是,建议自己动手尝试搭建比较好,不然印象不太深刻,等于没学(有个词儿叫行动废人,虽然不好听但目的是希望能让你动手实践)。 说明: 这里之所以没用官方的demo是因为我本地实在编译不出来,而且官方给的项目太大,对于学习来说没必要全部下载。(我只想要examples模块,但是必须强制全部下载,就很烦) 当然,要下载的朋友看这里 。 官方的中文文档地址是这个 ,可以按照官方提供的文档做。但如果只是玩具,那我这种All on one的方式我觉得更简单。 Helloworld 我们直接拿官方的例子来讲解,官方代码地址 。里面有很多例子,我这里只讲部分。 proto文件 我们到官方地址 抄作业时要注意,整个目录的结构。 proto文件只能放在模块的src/main下面,注意位置还有名字是否弄错,不然生成不了代码。 代码 服务端:代码地址 客户端:代码地址 特性讲解 我们知道gRPC不仅仅是一个helloworld就能描述清楚的,我下面将官方的代码例子做个分类,顺便总结下。 Stream 例子 proto: 代码地址 代码目录: 代码地址 总结 上述代码想表达的意思是,服务端在收到全部的客户端数据之后再响应回客户端处理结果。实际情况可以是服务端先处理一部分,然后返回部分。 也可以是任意顺序, 重要的是了解如何使用Stream的相关API来做交互。 TLS 例子 proto: 代码地址 代码目录: 代码地址 (还是helloworld的例子) 总结 这个就没啥好说的,用了Http2.0的TLS特性,默认就是开启的。如果客户端要传明文则必须在channel中配置,如下所示。 SLB 和 Health Check 例子 proto: 代码地址 代码目录: 代码地址 官方并没提供,下面都是自己的尝试

阅读全文 arrow_forward