首页 > 解决方案 > Java GRPC TLS 客户端无法执行

问题描述

我对 GRPC 相当陌生,而 Java GRPC 是我的目标。我有一个 GRPC 服务器在使用基于 X.509 的证书/密钥保护的特使负载均衡器后面成功运行。现在,我在为其创建客户端时遇到了问题。

Maven 存储库建议可用的最新 io.grpc 版本是 1.17.1,Github 上提到的 GRPC 示例是 1.19.0-SNAPSHOT 或 1.17.3-SNAPSHOT。

我确实复制了整个 repo 并在我的本地开发环境中构建/安装代码,我在运行客户端 (TLS) 示例以及我自己的代码时遇到了问题。

我的 pom 是

<properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <grpc.version>1.19.0-SNAPSHOT</grpc.version><!-- CURRENT_GRPC_VERSION -->
                <protoc.version>3.5.1-1</protoc.version>
                <netty.tcnative.version>2.0.20.Final</netty.tcnative.version>
                <!-- required for jdk9 -->
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
        </properties>

我得到的错误与protoc-gen-grpc-java有关,

io.grpc:protoc-gen-grpc-java:exe:linux-x86_64:1.19.0-SNAPSHOT

我已经根据他们的带有 skipcodegen=true 属性的 git 页面构建并安装了 GRPC-JAVA,它应该在本地 maven repo 中本地安装所需的 jar。看起来像 protobuf 等其他有,但不是这个。

然后我尝试使用 Maven 上最新可用的 1.17.1,我的 pom 是

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <grpc.version>1.17.1</grpc.version><!-- CURRENT_GRPC_VERSION -->
        <protobuf.version>3.5.1</protobuf.version>
        <protoc.version>3.5.1-1</protoc.version>
        <netty.tcnative.version>2.0.7.Final</netty.tcnative.version>
        <!-- required for jdk9 -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

这里的错误是 -

An exception occured while executing the Java class. Could not find TLS ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available

我不确定可能是什么问题,任何帮助都会非常明显。

Ĵ

标签: javamavengrpcgrpc-java

解决方案


通常不应使用 SNAPSHOT 版本。这些示例不使用 SNAPSHOT 版本作为发布标签。在尝试示例时查看最新的发布标签。这应该可以解决protoc-gen-grpc-java缺失(由 引起skipCodegen=true)的任何问题。

在抛出“找不到 TLS ALPN 提供程序”异常之前应该有 INFO 级别的日志。有三个重要的日志条目:“netty-tcnative 不可用(这可能是正常的)”、“Conscrypt not found(这可能是正常的)”和“Jetty ALPN 不可用(这可能是正常的)”。他们将有例外,以及应该使问题更清楚的附加信息。

如果仍有问题,请尝试运行Google Cloud Compat Checker。它检查会阻止 ALTS 运行的常见问题。

您还可以参考 gRPC 的SECURITY.md以获取故障排除信息。


推荐阅读