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

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

我确实复制了整个存储库,并在运行客户端(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


我已经按照他们的git页面使用skipcodegen = true属性构建并安装了GRPC-JAVA,它应该在本地Maven存储库中本地安装所需的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


我不确定这可能是什么问题,任何帮助都将是非常可贵的。

Ĵ

最佳答案

通常,您不应该使用SNAPSHOT版本。这些示例未将SNAPSHOT版本用于发行标签。试用示例时,请签出最新的发行标签。这样可以解决protoc-gen-grpc-java丢失(由skipCodegen=true引起)的任何问题。

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

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

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

关于java - Java GRPC TLS客户端无法执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54183751/

10-13 09:13