在现代微服务架构中,单纯依赖 gRPC 并不能覆盖所有的应用场景,因此结合 HTTP 协议可以提供更加全面的服务支持。本文将介绍如何通过一键生成 HTTP + gRPC 通用混合架构的微服务代码,以构建更灵活、更兼容的微服务系统。
为什么选择 HTTP + gRPC 服务?
-
兼容性更强
- 浏览器支持: HTTP 是 Web 应用的基础,允许浏览器直接访问,而 gRPC 需要额外的客户端库支持。
- 现有生态: 许多现有工具、库和框架都基于 HTTP 协议,将 HTTP 与 gRPC 结合,可以更好地与现有系统集成。
-
灵活性更高
- 多种传输协议: 可以根据具体需求选择合适的传输协议。对性能要求高的场景可以使用 gRPC,而对兼容性要求高的场景则可以使用 HTTP。
- 多种数据格式: 支持多种数据格式,如 JSON 和 Protocol Buffers,以满足不同客户端的需求。
-
易于扩展
- 逐步迁移: 可以在保持现有 HTTP 服务的基础上,逐步迁移到 gRPC,避免大规模系统替换带来的风险。
- 混合架构: 同时支持 gRPC 和 HTTP 客户端,以服务于不同的使用场景。
-
架构更简洁
- 相较于 gRPC-Gateway + gRPC 架构,HTTP + gRPC 的混合架构仅需一个服务即可同时提供两种协议支持,也减少了开发和维护的复杂度。
通过整合 HTTP 和 gRPC,可以构建更加灵活且兼容性强的微服务系统,从而适应多变的业务需求和技术场景。
环境准备
- 准备一个proto文件,(例如 user.proto )。
- 安装 sponge。
安装 sponge 后,运行以下命令启动 UI 界面:
sponge run
快速创建微服务项目
进入 sponge 的 UI 界面,点击左侧菜单栏【Protobuf】–>【创建 grpc + http 服务】,根据需要填写参数生成微服务项目代码。
解压代码,切换到项目目录(如 user 目录),执行以下命令:
# 生成代码
make proto
# 打开 internal/service/user.go 文件,按照生成的示例代码添加业务逻辑。
# 编译并启动服务
make run
服务启动后,可以分别测试 HTTP 和 gRPC 协议的 API:
(1) 测试或性能压测 gRPC API
使用 Goland IDE 打开项目代码,进入 internal/service
目录,找到后缀为 _client_test.go
的文件,该文件包含在 proto 文件中定义的所有 API 的测试和性能压测函数,测试前需填写请求参数。
如果没有 Goland IDE,也可以通过命令行方式测试。切换到 internal/service
目录,修改 user_client_test.go
文件中的 gRPC 请求参数,然后执行以下命令测试指定 gRPC 方法,例如:go test -run Test_service_user_methods/Register
。
(2) 测试 HTTP API
通过浏览器访问 http://localhost:8080/apis/swagger/index.html,使用 Swagger UI 测试 HTTP API。
总结
以上是通过 sponge 生成 HTTP + gRPC 服务代码的快速方法,这是生成的user服务代码。在此基础上,可以继续扩展服务代码,例如自动添加 CRUD API 接口或人工添加自定义 API 接口。更多开发 HTTP + gRPC 服务的详细文档,请点击查看 https://go-sponge.com/zh-cn/microservice-development-mix-protobuf。
通过采用 HTTP + gRPC 混合架构,开发者可以在现有系统中无缝集成、灵活选择协议、逐步迁移和扩展服务,从而构建出更加适应实际业务需求的微服务架构。