You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus扩展中无法注入生成的gRPC客户端的问题

问题分析与解决

你遇到的错误核心是:Quarkus gRPC客户端扩展仅允许注入Mutiny风格的服务接口、阻塞存根、基于Mutiny的响应式存根或io.grpc.Channel,而你直接注入的Authorization是原始gRPC生成的服务类,不在支持范围内。

解决步骤

1. 确保生成Quarkus兼容的gRPC客户端存根

在你的Quarkus扩展中,配置gRPC代码生成器,生成Quarkus支持的存根类型:

  • Maven项目需在quarkus-grpc-codegen插件中指定生成类型:
<plugin>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-grpc-codegen-maven-plugin</artifactId>
    <version>${quarkus.version}</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <protoPaths>
                    <path>src/main/proto</path>
                </protoPaths>
                <!-- 可选MUTINY生成响应式存根,或BLOCKING生成阻塞存根 -->
                <type>MUTINY</type>
            </configuration>
        </execution>
    </executions>
</plugin>
  • Gradle项目则在build.gradle中配置:
quarkusGrpcCodeGen {
    protoPaths = ["src/main/proto"]
    type = "MUTINY" // 或指定"BLOCKING"
}

2. 修改AuthService的注入类型

根据生成的存根类型,调整注入代码:

方式一:注入Mutiny风格响应式存根

@ApplicationScoped
public class AuthService {
    @GrpcClient("auth")
    AuthorizationMutinyStub authorization;
}

方式二:注入阻塞式存根

@ApplicationScoped
public class AuthService {
    @GrpcClient("auth")
    AuthorizationBlockingStub authorization;
}

方式三:通过Channel手动初始化存根

如果需要更灵活的控制逻辑,可以注入Channel后自行创建存根:

@ApplicationScoped
public class AuthService {
    @GrpcClient("auth")
    Channel channel;

    private AuthorizationBlockingStub authorizationStub;

    @PostConstruct
    void initStub() {
        authorizationStub = AuthorizationGrpc.newBlockingStub(channel);
    }
}

3. 验证扩展配置

确保你的扩展部署Processor中,已将生成的存根类正确纳入反射或额外Bean配置(如果需要),避免运行时出现类加载问题。

内容的提问来源于stack exchange,提问作者hungbk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:40:14