CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
gRPC 入门/课时/Spring gRPC 集成
RawBlame
课时目录12 节

gRPC 入门

  1. 01gRPC 是什么
  2. 02Protocol Buffers
  3. 03代码生成
  4. 04Java 服务端
  5. 05Java 客户端
  6. 06流式 RPC
  7. 07Spring gRPC 集成
  8. 08状态与错误
  9. 09gRPC-Gateway
  10. 10gRPC vs REST
  11. 11TLS 与安全
  12. 12综合练习

Spring gRPC 集成

grpc-spring-boot-starter 概念与配置。

35 分钟

Spring gRPC 集成

grpc-spring-boot-starter(net.devh)把 gRPC Server/Client 纳入 Spring 生命周期:注解注册 Service、YAML 配置端口、与现有 @RestController 同 JVM 不同协议。

学习目标

  • 添加 starter 依赖与 grpc.server.port 配置
  • 用 @GrpcService 替代手写 ServerBuilder
  • 在 lab-grpc profile 启用,默认 profile 零 gRPC 开销

核心内容

依赖与配置

<dependency>
  <groupId>net.devh</groupId>
  <artifactId>grpc-server-spring-boot-starter</artifactId>
  <version>3.1.0.RELEASE</version>
</dependency>
# application-lab-grpc.yml
grpc:
  server:
    port: 9090
spring:
  profiles:
    active: lab-grpc

重要:CodeRoadMap 对外 主 API 仍是 REST 8080 /tracks。gRPC 9090 仅 lab;与 graphql-essentials 的 lab-graphql profile 策略一致。

@GrpcService 示例

@Profile("lab-grpc")
@GrpcService
public class TrackGrpcService extends TrackServiceGrpc.TrackServiceImplBase {

    private final TrackService trackService;

    @Override
    public void getTrack(GetTrackRequest req, StreamObserver<GetTrackResponse> resp) {
        trackService.findBySlug(req.getSlug())
            .ifPresentOrElse(
                t -> {
                    resp.onNext(GetTrackResponse.newBuilder()
                        .setTrack(toProto(t)).build());
                    resp.onCompleted();
                },
                () -> resp.onError(Status.NOT_FOUND.asRuntimeException())
            );
    }
}

注入 TrackService 与 REST Controller 共享事务(spring-boot-essentials)。

Client 侧

<dependency>
  <groupId>net.devh</groupId>
  <artifactId>grpc-client-spring-boot-starter</artifactId>
</dependency>
@GrpcClient("track-service")
private TrackServiceGrpc.TrackServiceBlockingStub trackStub;

配合 spring-cloud-essentials 时,track-service 可解析为 K8s Service 名;浏览器仍调 REST Gateway。

练习

  • spring.profiles.active=lab-grpc 启动,确认 9090 与 8080 同时监听
  • 默认 profile 启动,确认 仅 8080
  • REST GET /tracks 与 gRPC ListTracks 条数一致

小结

Spring gRPC = @GrpcService + profile 隔离 + 复用 Service 层。 下一课 Status、Metadata 与 deadline。

加载本节练习…
← 上一课流式 RPC下一课 →状态与错误