1

在现代微服务架构中,单纯依赖 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,可以构建更加灵活且兼容性强的微服务系统,从而适应多变的业务需求和技术场景。


环境准备

安装 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 混合架构,开发者可以在现有系统中无缝集成、灵活选择协议、逐步迁移和扩展服务,从而构建出更加适应实际业务需求的微服务架构。


gvison
9 声望3 粉丝