google Cloud spanner java.lang.IllegalArgumentException:Jetty ALPN/NPN 未正确配置

Posted

技术标签:

【中文标题】google Cloud spanner java.lang.IllegalArgumentException:Jetty ALPN/NPN 未正确配置【英文标题】:google Cloud spanner java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured 【发布时间】:2017-11-16 17:16:48 【问题描述】:

我是 Google Cloud Spanner 的新手,为了探索它,我从 google Here 提供的文档开始。为了探索我们从数据操作开始的任何数据库,和我一样,我开始使用这里给出的简单 java 应用程序将数据写入扳手https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/spanner/cloud-client/src/main/java/com/example/spanner/SpannerSample.java。 我已在以下代码 sn-p 所示的各个位置对驱动程序类进行了更改:

 public static void main(String[] args) throws Exception 
            String path = "File_Path";

            SpannerOptions.Builder options = SpannerOptions.newBuilder().setCredentials(GoogleCredentials.fromStream(new FileInputStream(path)));
            options.setProjectId("Project_id");
            Spanner spanner = (options.build()).getService();
            try 
                DatabaseId db = DatabaseId.of("project_id", "spannerInstance", "Database_name");
                DatabaseClient dbClient = spanner.getDatabaseClient(db);
                run(dbClient);
             finally 
                spanner.closeAsync().get();
            
            System.out.println("Closed client");
        

现在,当我尝试执行代码时,出现以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured.
    at io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:174)
    at io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:151)
    at io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:139)
    at io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:109)
    at com.google.cloud.spanner.SpannerOptions$NettyRpcChannelFactory.newSslContext(SpannerOptions.java:283)
    at com.google.cloud.spanner.SpannerOptions$NettyRpcChannelFactory.newChannel(SpannerOptions.java:274)
    at com.google.cloud.spanner.SpannerOptions.createChannel(SpannerOptions.java:253)
    at com.google.cloud.spanner.SpannerOptions.createChannels(SpannerOptions.java:240)
    at com.google.cloud.spanner.SpannerOptions.<init>(SpannerOptions.java:89)
    at com.google.cloud.spanner.SpannerOptions.<init>(SpannerOptions.java:43)
    at com.google.cloud.spanner.SpannerOptions$Builder.build(SpannerOptions.java:180)

在搜索这个问题时,我被建议添加一些依赖项,例如:

   compile group: 'org.eclipse.jetty.alpn', name: 'alpn-api', version: '1.1.3.v20160715'
   compile group: 'org.mortbay.jetty.alpn', name: 'jetty-alpn-agent', version: '2.0.6'
   compile group: 'io.grpc', name: 'grpc-all', version: '1.2.0'
   compile group: 'io.netty', name: 'netty-all', version: '4.0.29.Final'
   compile group: 'org.eclipse.jetty.orbit', name: 'javax.servlet', version: '3.0.0.v201112011016'

但面临同样的问题,我也在使用 Bigquery 和其他 GCP 的功能,它们在一个相同的工作环境中,除了 google-Spanner 之外,它们都工作正常,对此提出任何建议表示赞赏。 谢谢。

【问题讨论】:

类路径中可能存在冲突的库,您能否列出您正在使用的 GCP 库的版本以便我们尝试重现?同时,您可能需要考虑将库更新到最新版本。 编译组:'com.google.cloud',名称:'google-cloud-spanner',版本:'0.17.1-beta' 这是我添加的 gradle 依赖项。 现在我使用最新的扳手 API 和云 API 作为编译组:'com.google.cloud',名称:'google-cloud-spanner',版本:'0.20.0-beta' 和编译组:'com.google.cloud',名称:'google-cloud',版本:'0.20.0-alpha' 仍然错误相同。任何建议 您能否尝试检查您的类路径中是否存在冲突的库?docs.gradle.org/current/userguide/… 所以这似乎是 tcnative 库的一个未解决的依赖,见github.com/grpc/grpc-java/issues/3025。两种可能的选择 1. 另一个版本的tcnativeTomcat 或另一个版本的Netty 拉入,并且gRPC 与那个版本的tcnative 不兼容; 2.tcnative不支持该平台(例如不支持ARM处理器)。这是gRPC的设置文档:github.com/grpc/grpc-java/blob/master/… 【参考方案1】:

请阅读有关问题的 cmets,@Mairbek Khadikov 和我对此的讨论得出了问题的实际原因。正如评论中所讨论的,实际问题出在另一个依赖项上。 通过添加

configurations 
    compile.exclude module: 'netty-all'

到这个问题已经解决的 build.gradle 文件。

这是我针对此错误提出的 github 问题的链接。 github issue 我最终发布了确切的问题,我知道了这个问题,并通过“@michaelbausor”解决了这个问题。

【讨论】:

以上是关于google Cloud spanner java.lang.IllegalArgumentException:Jetty ALPN/NPN 未正确配置的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Firestore 与 Google Cloud Spanner 的区别?

Google Cloud Spanner 和 Cloud SQL 有啥区别?

如何有效地与多个线程并行查询 google-cloud-spanner?

Google Cloud Spanner 是不是支持压缩?

Google Cloud Spanner 中的自动增量

Google Cloud Spanner 是不是支持默认列值?