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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
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综合练习

综合练习

TrackService gRPC 实验与 REST 对照。

40 分钟

综合练习

动手搭建 TrackService gRPC lab,与现有 REST /tracks 并存对照。巩固 .proto、代码生成、Spring gRPC、客户端 smoke test;不替换 CodeRoadMap 生产主路径。

学习目标

  • 完成从 track.proto 到 @GrpcService 的闭环
  • 用 blocking stub 验证与 REST 数据一致
  • 撰写 README 说明「为何全站仍 REST」

核心内容

任务 A:契约

src/main/proto/track.proto(见 grpc-proto):

service TrackService {
  rpc GetTrack(GetTrackRequest) returns (GetTrackResponse);
  rpc ListTracks(ListTracksRequest) returns (ListTracksResponse);
}

mvn compile 生成 Java stub(grpc-codegen)。

任务 B:服务端(lab-grpc profile)

@Profile("lab-grpc")
@GrpcService
public class TrackGrpcService extends TrackServiceGrpc.TrackServiceImplBase {
    @Override
    public void listTracks(ListTracksRequest req, StreamObserver<ListTracksResponse> resp) {
        var tracks = trackService.findAll().stream().map(this::toProto).toList();
        resp.onNext(ListTracksResponse.newBuilder().addAllTracks(tracks).build());
        resp.onCompleted();
    }
}

启动:spring.profiles.active=lab-grpc,gRPC 9090 + REST 8080。

任务 C:客户端 smoke test

@Test
@ActiveProfiles("lab-grpc")
void listTracksMatchesRest() {
    var grpcCount = stub.listTracks(ListTracksRequest.getDefaultInstance())
        .getTracksCount();
    var restCount = restTemplate.getForObject("/tracks", List.class).size();
    assertThat(grpcCount).isEqualTo(restCount);
}

任务 D:对照文档(验收)

检查项RESTgRPC lab
列表条数GET /tracksListTracks
单条查询GET /tracks/{slug}GetTrack
生产 profile✅ 启用❌ 关闭
Next.js 主站✅ fetch
/tracks
❌ 不接入

可选:与 graphql-essentials lab 一样,页脚注明实验性质。微服务拆分预习 spring-cloud-essentials。

练习

  • 完成 A+B+C 并通过测试
  • 写 5 行对比:同一 Track 的 REST JSON vs Protobuf 字段
  • 在 /tracks/grpc-essentials 通读本 track 12 课

小结

gRPC 技能 = 读懂 + lab 动手 + 理性选型;CodeRoadMap 权威数据仍经 REST /tracks 与 MySQL 交付。 本 track 完结;Spring 基础见 spring-boot-essentials,API 选型对照 gql-rest。

加载本节练习…
← 上一课TLS 与安全