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-grpcprofile 启用,默认 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。