Java基础、中级、高级、架构面试资料

spring-grpc重磅发布,5分钟上手,代码减少80%,兼容MVC并简化80%配置

JAVA herman 9浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

两周之前,我注意到 Spring 官方发布了 spring-grpc 这个新框架,并且已经正式 GA 了,当前最新版本为 1.0.0。

我看这个框架很少有程序员写这方面的文章,可能是刚推出来不久吧。所以,我这里准备尝个鲜,试着聊聊 spring-grpc 的前世今生,揭开它的诞生之谜,并与社区方案全面对比,助力大家掌握下一代 RPC 框架的最佳实践。

spring-grpc 的诞生

grpc 框架市面上已经有不少了,但 Spring 官方还是决定推出自有的 grpc 框架。

下面我们一起看看 Spring 生态的“官方答案”给出的理由。

为什么要造这个新轮子?

要知道在 spring-grpc 出现之前,Spring 生态中的 gRPC 支持主要依赖社区项目(如 grpc-spring-boot-starter)。虽然这些项目功能强大,但 Spring 团队意识到了这些社区项目有几个核心痛点。

  1. 集成深度不足:社区项目难以完全融入 Spring Security、Spring MVC 等核心模块
  2. 配置复杂度高:需要手动处理 Protobuf 编译、服务注册、拦截器配置等繁琐工作
  3. 缺乏统一标准:多个社区项目并存,没有“官方背书”的最佳实践
  4. 云原生支持:在 Kubernetes、服务网格等场景下需要更原生的支持

正如 Spring 团队在 2025 年 1 月的官方博客https://spring.io/blog/2025/01/17/spring-grpc-0-3-0中所说,spring-grpc 的目标是成为 Spring 生态中 gRPC 支持的标准方案,让开发者能像使用 Spring MVC 一样简单地使用 gRPC。

说白了,Spring 需要制定 grpc 的标准方案,深度基础,简化使用,云原生等,所以决定自己重新造一个轮子。

它要解决什么问题?

spring-grpc 的核心使命可以总结为:让 gRPC 在 Spring 中像 @Controller 一样简单

  • 零配置启动:自动配置 gRPC 服务器、客户端、健康检查、指标监控
  • 安全无缝集成:原生支持 Spring Security 的认证/授权机制
  • Servlet 生态融合:可将 gRPC 服务嵌入到现有 Spring Web 应用中,共享 HTTP/2 端口
  • 可观测性:自动集成 Spring Boot Actuator、Micrometer 指标和链路追踪
  • 生产就绪:提供完善的异常处理、超时控制、负载均衡策略

让 grpc 在 Spring 中开箱即用。

三大 gRPC 框架深度对比

目前 Java 生态常用的有三种 gRPC 集成方案,我们用一个表格来看清它们的差异。

特性官方 gRPC-Java社区 grpc-spring-boot-starter官方 spring-grpc
维护方Google gRPC 团队社区(原 yidongnan,现迁移至 grpc-ecosystem)Spring 官方团队
最新版本1.59.0+2.15.0.RELEASE1.0.0
成熟度极为成熟生产验证快速发展中
Spring 集成手动配置深度集成原生集成(官方血统)
Spring Security需手动实现支持完整支持(Servlet 引擎)
自动配置丰富更智能(Spring Initializr 原生支持)
性能极致(无框架开销)优秀(约 5-10% 损耗)良好(优化中)
适用场景性能极致追求、独立服务企业级 Spring 应用、微服务Spring 生态重度用户、云原生

随着 spring-grpc 的发展,它很可能后来居上,一个 @GrpcController 搞定一切,还可以和 @RestController 并存使用。

grpc-spring-boot-starter

grpc-spring-boot-starter作为目前最成熟的选择,它提供了:

  • 丰富的注解:@GrpcService@GrpcClient 简化开发
  • 生态完善:支持 Spring Cloud(Eureka/Consul/Nacos)、Sleuth 链路追踪
  • 功能稳定:经过大规模生产验证,文档社区活跃

但是,它毕竟是“第三方”的,在 Spring Security 深度整合、Servlet 栈统一等方面存在天花板。Spring 需要一个亲儿子。

spring-grpc 的杀手锏

spring-grpc 最大的差异化在于可以嵌入到 Spring Web 应用中,让你的应用同时提供:

  • RESTful API (@Controller)
  • gRPC API (@GrpcController)
  • GraphQL/WebSocket 等

让你的 grpc 用起来和 mvc 一样简单。同时,可以全部共享同一个 HTTP/2 端口和 Servlet 容器!这在需要逐步从 REST 迁移到 gRPC 的场景中是无价之宝。

另外,随着即将发布的 JDK 26,HTTP/3 QUIC 也将会被无缝的支持。

Hello spring-grpc 入门

根据官方博客https://spring.io/blog/2025/01/17/spring-grpc-0-3-0,最快的方式是通过 Spring Initializr。推荐使用正式的 GA 版本,v1.0.0,只需 5 分钟即可快速入门上手。

项目初始化

访问 start.spring.io,添加gRPC依赖,生成项目。它已经包含了所有必要的 Protobuf 编译插件配置。

定义服务(proto/helloworld.proto)

syntax = "proto3";

package com.example.demo;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

实现服务(无需编译插件配置!)

import org.springframework.grpc.server.service.GrpcService;

@GrpcService
public class GreeterService extends GreeterGrpc.GreeterImplBase {

    @Override
    public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
        String message = "Hello, " + request.getName() + "!";

        HelloReply reply = HelloReply.newBuilder()
            .setMessage(message)
            .build();

        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}

就是这么简单!不需要手动配置 gRPC Server,不需要处理端口监听,Spring Boot 自动完成一切。

客户端调用

import org.springframework.grpc.client.GrpcClient;

@Service
public class HelloClient {

    @GrpcClient("localhost", 9090)
    private GreeterGrpc.GreeterBlockingStub greeterStub;

    public String sayHello(String name) {
        HelloRequest request = HelloRequest.newBuilder()
            .setName(name)
            .build();

        HelloReply reply = greeterStub.sayHello(request);
        return reply.getMessage();
    }
}

其它的核心组件集成,比如:Spring Security 原生集成(杀手级特性)、智能自动配置、一键开启可观测性等等,我就不细说了,官方文档中都有。

总结与展望

spring-grpc 目前已发布 1.0.0 的正式 GA 版本,功能完备,社区正在蓬勃发展。如果你正在进行 grpc 框架选型,不防抓住这次尝试 spring-grpc 的最佳时机!

因为 spring-grpc 提供完整的 Spring Cloud 集成(服务发现、配置中心),反应式编程支持(Project Reactor),更完善的测试工具(@GrpcTest 注解),企业级技术文档和迁移指南。

技术的演进永不停歇。spring-grpc 的出现不是推翻社区的努力,而是 Spring 官方对开发者需求的正式回应。它代表着 Spring 生态在云原生时代的又一次自我革新。最后无论你现在选择哪个方案,理解其设计哲学和适用边界,才是架构决策的关键。

参考资料

  • Spring 官方博客:https://docs.spring.io/spring-grpc/reference/
  • spring-grpc GitHub:https://github.com/spring-projects/spring-grpc
  • 社区 grpc-spring 项目:https://github.com/grpc-ecosystem/grpc-spring

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » spring-grpc重磅发布,5分钟上手,代码减少80%,兼容MVC并简化80%配置