Quarkus gRPC构建报错:仅Mutiny服务接口等可通过@GrpcClient注入
报错原因
你当前通过@GrpcClient注解注入的是gRPC原生生成的XxxServiceGrpc原始类,不符合Quarkus gRPC客户端的注入要求。Quarkus的@GrpcClient仅支持注入四类对象:Mutiny响应式服务接口、基于Mutiny的阻塞Stub、基于Mutiny的响应式Stub、io.grpc.Channel原生通道,注入其他类型就会触发该构建报错。
解决方案
你可以根据自己的业务需求选择以下任意一种方案修复:
- 优先使用Quarkus适配的Mutiny响应式Stub:将注入的类型替换为proto生成的Mutiny版Stub即可,比如你定义的服务名为
DemoService,对应注入类型为MutinyDemoServiceGrpc.MutinyDemoServiceStub,这是Quarkus官方推荐的gRPC客户端使用方式。 - 若需要使用同步阻塞调用逻辑:将注入类型替换为对应阻塞Stub,示例为
MutinyDemoServiceGrpc.DemoServiceBlockingStub。 - 若你必须使用原生gRPC Stub:先通过
@GrpcClient注入io.grpc.Channel对象,再手动构造原生Stub,示例代码如下:@GrpcClient("demo-service") Channel channel; // 手动构造原生Stub public DemoServiceGrpc.DemoServiceStub getNativeStub() { return DemoServiceGrpc.newStub(channel); } - 额外校验:确认项目依赖中已正确引入
quarkus-grpc依赖,且依赖版本与项目使用的Quarkus整体版本保持一致,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者Ragnar
相关产品推荐
相关产品推荐

