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

时间:2017-03-26 16:22:24

标签: java spring-boot apache-kafka classloader grpc

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  1. 正如google所建议的,使用jetty容器而不是tomcat,这个解决方案有效,但在我们的生产中,应用程序部署在tomcat容器上,但当然我需要它在生产中使用tomcat。
  2. 在调试gRPC代码时,发现导致该问题的guava版本,更新了番石榴版本18.0(在以前的版本中遗漏的某些类中)解决了问题,但在部署CF时失败
  3. 自定义emebed-tomcat-core,它的工作正常,但团队对自定义tomcat容器说不。
  4. Java –jar apm-asset-xxxx.jar - 在本地工作正常,但需要为CF启动提供自定义命令,没有奢侈品来改变CF启动过程。
  5. 最后,通过在pom.xml中提供以下依赖关系,类加载器在运行时使用tcnative-boring-ssl,库而不是tomcat-core库。在过去的3天里,这个解决方案正在运行CF.

        org.springframework.boot     弹簧引导启动的Web                           org.hibernate作为             *                               org.apache.tomcat.embed             Tomcat的嵌入芯                   org.apache.tomcat.embed     Tomcat的嵌入芯     提供

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

您可以在此处找到有关它的更多信息:https://medium.com/@Parithi/jetty-alpn-npn-has-not-been-properly-configured-solution-418417ee6502

答案 4 :(得分:-1)

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

<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>