gRPC Gateway 与生产环境部署
gRPC-Gateway:让前端也能调 gRPC 📖 前置阅读:本文假设读者已完成 gRPC 服务的开发和微服务拆分。如果还不熟悉,建议先阅读 SpringBoot gRPC 全操作指南 和 微服务拆分实战:以 proto 为契约。 一、⚡ gRPC 最大的问题:浏览器不支持 你花了两周把微服务之间的通信全换成了 gRPC——性能翻了 3 倍,Protobuf 二进制传输省了 60% 带宽。看起来很完美。 然后前端同事找来了:“你的接口怎么调?Postman 发 HTTP 请求连不上。" 这就是 gRPC 最大的现实问题——gRPC 基于 HTTP/2,浏览器不直接支持 gRPC 协议。你在浏览器里 fetch('http://localhost:9090/...') 是调不通的——浏览器不会说 gRPC。 解决方案是gRPC-Gateway——在 gRPC 服务前面放一个网关,对外提供标准的 HTTP RESTful JSON 接口,对内转成 gRPC 调用: 浏览器/移动端/curl(HTTP/1.1 JSON) ↓ [gRPC-Gateway / Envoy / grpc-web] ← 协议转换层 ↓ gRPC(HTTP/2 Protobuf) [gRPC Server] 二、🔌 方案选择:三种网关方案 方案 原理 适用场景 复杂度 gRPC-Gateway 从 proto 自动生成反向代理代码——HTTP JSON ↔ gRPC 转换 gRPC 服务需要同时支持 HTTP JSON 和 gRPC 调用方 中 Envoy gRPC-JSON Transcoder Envoy 代理层做协议转换——不需要修改代码 有服务网格——统一的入口网关 中 grpc-web + Envoy 浏览器用 grpc-web 协议(HTTP/1.1),Envoy 转成 gRPC 前端直接在浏览器中调 gRPC(不需要 REST 包装) 高 本文重点讲方案一 gRPC-Gateway——它最直接、不需要额外的代理基础设施、和 SpringBoot 整合最简单。 ...