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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
gRPC 入门/课时/Java 客户端
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综合练习

Java 客户端

ManagedChannel、stub 调用。

35 分钟

Java 客户端

gRPC Client 通过 ManagedChannel 连接服务端,用 stub 发起 RPC。Blocking stub 适合 lab 脚本;异步 stub 适合高并发微服务。

学习目标

  • 创建 ManagedChannel 与 TrackServiceBlockingStub
  • 调用 GetTrack 并处理 StatusRuntimeException
  • 对比同一数据的 REST curl 与 gRPC 调用路径

核心内容

Blocking 客户端

ManagedChannel channel = ManagedChannelBuilder
    .forAddress("localhost", 9090)
    .usePlaintext()  // lab only;生产见 grpc-security
    .build();

TrackServiceGrpc.TrackServiceBlockingStub stub =
    TrackServiceGrpc.newBlockingStub(channel);

try {
    GetTrackResponse resp = stub.getTrack(
        GetTrackRequest.newBuilder().setSlug("grpc-essentials").build());
    System.out.println(resp.getTrack().getTitle());
} catch (StatusRuntimeException e) {
    System.err.println(e.getStatus().getCode() + ": " + e.getStatus().getDescription());
} finally {
    channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
}

注意:Next.js 主站 nextjs-essentials 不会直接调 gRPC——浏览器走 REST /tracks 或经 Gateway 转 REST。

Stub 类型

Stub场景
BlockingStub同步、脚本、单元测试
Stub(async)StreamObserver 回调
FutureStubListenableFuture 集成

Deadline 示例

stub.withDeadlineAfter(2, TimeUnit.SECONDS).getTrack(request);

超时返回 DEADLINE_EXCEEDED(grpc-error)。REST 侧等价 RestTemplate/WebClient timeout 配置(spring-boot-essentials)。

微服务间调用

服务 B 作为 gRPC Client 调服务 A 的 TrackService——典型 spring-cloud-essentials + 负载均衡场景。对外 BFF 仍暴露 REST 或 graphql-essentials 聚合层,不把 gRPC 端口暴露给公网。

练习

  • 编写 GrpcClientSmokeTest 断言 ListTracks 数量
  • 故意传错误 slug,捕获 NOT_FOUND
  • 对照 curl localhost:8080/tracks/grpc-essentials 与 gRPC 响应字段

小结

Client = Channel + Stub + 错误/超时处理。 下一课四种流式 RPC 模式。

加载本节练习…
← 上一课Java 服务端下一课 →流式 RPC