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

Posted

技术标签:

【中文标题】java.lang.IllegalArgumentException:Jetty ALPN/NPN 未正确配置【英文标题】:java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured 【发布时间】:2017-08-19 06:29:46 【问题描述】:

获取java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured,同时使用gRPC(google pub/sub) 发布/使用来自Kafka的消息。

【问题讨论】:

请提供minimal reproducible example。 格式化和新标签 你使用的是带有嵌入式 tomcat 的 spring boot 吗? 是的,我们使用带有嵌入式tomcat的spring boot 【参考方案1】:
    按照 google 的建议,使用 jetty 容器代替 tomcat,此解决方案有效,但在我们的生产中,应用程序部署在 tomcat 容器上,但我当然需要它在生产中的 tomcat 上工作。 在调试 gRPC 代码时,发现是 guava 版本导致问题,更新了 guava 版本 18.0,(以前版本中缺少某些类),解决了问题,但在 CF 中部署时失败 自定义的 emebed-tomcat-core,它始终可以正常工作,但团队再次拒绝自定义 tomcat 容器。 Java –jar apm-asset-xxxx.jar - 在本地运行良好,但需要提供自定义命令来启动 CF,没有权限更改 CF 启动过程。

    最后,通过在 pom.xml 中提供以下依赖项,让类加载器在运行时使用 tcnative-boring-ssl 库而不是 tomcat-core 库。在过去的 3 天里,这个解决方案正在运行 CF。

    org.springframework.boot spring-boot-starter-web org.hibernate * org.apache.tomcat.embed tomcat-embed-core org.apache.tomcat.embed tomcat-embed-core 假如

    用于将 tc-native 库提升到类加载器顶部的 Maven 清单插件。

【讨论】:

老兄,将此添加到问题中。这不是论坛【参考方案2】:

添加与我的 JDK 版本匹配的 ALPN 客户端 JAR 为我解决了这个问题。在 Eclipse 中,您需要将 jar 设置为 tomcat 服务器的引导入口。

你可以在这里找到更多信息:https://medium.com/@Parithi/jetty-alpn-npn-has-not-been-properly-configured-solution-418417ee6502

【讨论】:

【参考方案3】:

最后,回到引导类类路径的方法。将 jetty-alpn.jar 前缀为引导类路径,它现在开始在 Cloud Foundry 中正常工作。

【讨论】:

【参考方案4】:

在 POM 中,尽量将 gRPC 依赖放在 spring boot 依赖之前(依赖的顺序很重要)。我这样做了,问题就解决了。例如:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-language</artifactId>
    <version>0.13.0-beta</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

【讨论】:

依赖顺序无关紧要,它在本地工作,gRPC/tc-native 在 spring-boot 之前。在 Cloud Foundry 中部署时,依赖的 jar 按字母数字顺序提取到 app 文件夹中。 我明白了,那么问题可能与我的不同。我在 Google Cloud 上尝试...【参考方案5】:

尝试在 netty-tcnative-boringssl-static 上添加运行时依赖项。请参阅 gRPC 的 SECURITY.md。请注意,netty-tcnative 的版本会随着时间而变化;您应该查看特定版本的文档版本(例如,this is for 1.2.0)。

【讨论】:

很久以前就尝试过这个选项。

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

IllegalArgumentException:此 NavController 未知导航目的地 xxx