Google-Cloud:Jetty ALPN/NPN 未正确配置 [英] Google-Cloud: Jetty ALPN/NPN has not been properly configured
问题描述
在使用 Google Pubsub 列出主题时出现异常,我的网络应用程序在 tomcat 上运行.
Getting exception whilst using Google Pubsub to list topics, my web application is running on tomcat.
public static List<String> listTopics(GcpCredentials gcCredentials, String project) throws GCPException, IOException
{
List<String> topics = new ArrayList<>();
TopicAdminClient client = getTopicClient(gcCredentials);
ProjectName projectName = ProjectName.create(project);
ListTopicsPagedResponse response = client.listTopics(projectName);
for (Topic topic :response.iterateAll())
{
topics.add(topic.getNameAsTopicName().getTopic());
}
return topics;
}`
异常:
java.lang.IllegalArgumentException: Jetty ALPN/NPN 未正确配置.
在 io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:174)在 io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:151)在 io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:139)在 io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:109)在 io.grpc.netty.NettyChannelBuilder.createProtocolNegotiatorByType(NettyChannelBuilder.java:335)在 io.grpc.netty.NettyChannelBuilder.createProtocolNegotiator(NettyChannelBuilder.java:308)在 io.grpc.netty.NettyChannelBuilder$NettyTransportFactory$DynamicNettyTransportParams.getProtocolNegotiator(NettyChannelBuilder.java:499)在 io.grpc.netty.NettyChannelBuilder$NettyTransportFactory.newClientTransport(NettyChannelBuilder.java:448)在 io.grpc.internal.CallCredentialsApplyingTransportFactory.newClientTransport(CallCredentialsApplyingTransportFactory.java:61)在 io.grpc.internal.InternalSubchannel.startNewTransport(InternalSubchannel.java:209)在 io.grpc.internal.InternalSubchannel.obtainActiveTransport(InternalSubchannel.java:186)在 io.grpc.internal.ManagedChannelImpl$SubchannelImplImpl.obtainActiveTransport(ManagedChannelImpl.java:806)在 io.grpc.internal.GrpcUtil.getTransportFromPickResult(GrpcUtil.java:568)在 io.grpc.internal.DelayedClientTransport.reprocess(DelayedClientTransport.java:296)在 io.grpc.internal.ManagedChannelImpl$LbHelperImpl$5.run(ManagedChannelImpl.java:724)在 io.grpc.internal.ChannelExecutor.drain(ChannelExecutor.java:87)在 io.grpc.internal.ManagedChannelImpl$LbHelperImpl.runSerialized(ManagedChannelImpl.java:715)在 io.grpc.internal.ManagedChannelImpl$NameResolverListenerImpl.onUpdate(ManagedChannelImpl.java:752)在 io.grpc.internal.DnsNameResolver$1.run(DnsNameResolver.java:174)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)在 java.lang.Thread.run(Thread.java:745)
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 io.grpc.netty.NettyChannelBuilder.createProtocolNegotiatorByType(NettyChannelBuilder.java:335) at io.grpc.netty.NettyChannelBuilder.createProtocolNegotiator(NettyChannelBuilder.java:308) at io.grpc.netty.NettyChannelBuilder$NettyTransportFactory$DynamicNettyTransportParams.getProtocolNegotiator(NettyChannelBuilder.java:499) at io.grpc.netty.NettyChannelBuilder$NettyTransportFactory.newClientTransport(NettyChannelBuilder.java:448) at io.grpc.internal.CallCredentialsApplyingTransportFactory.newClientTransport(CallCredentialsApplyingTransportFactory.java:61) at io.grpc.internal.InternalSubchannel.startNewTransport(InternalSubchannel.java:209) at io.grpc.internal.InternalSubchannel.obtainActiveTransport(InternalSubchannel.java:186) at io.grpc.internal.ManagedChannelImpl$SubchannelImplImpl.obtainActiveTransport(ManagedChannelImpl.java:806) at io.grpc.internal.GrpcUtil.getTransportFromPickResult(GrpcUtil.java:568) at io.grpc.internal.DelayedClientTransport.reprocess(DelayedClientTransport.java:296) at io.grpc.internal.ManagedChannelImpl$LbHelperImpl$5.run(ManagedChannelImpl.java:724) at io.grpc.internal.ChannelExecutor.drain(ChannelExecutor.java:87) at io.grpc.internal.ManagedChannelImpl$LbHelperImpl.runSerialized(ManagedChannelImpl.java:715) at io.grpc.internal.ManagedChannelImpl$NameResolverListenerImpl.onUpdate(ManagedChannelImpl.java:752) at io.grpc.internal.DnsNameResolver$1.run(DnsNameResolver.java:174) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
推荐答案
我在 Netty 4.1.15.Final 版本中发现了这个问题,但在 4.1.13.Final 中没有.检查您的传递依赖项.即 Spring Boot 引用了 Netty.
I have observed this problem with Netty version 4.1.15.Final but not with 4.1.13.Final. Check your transitive dependencies. I.e Spring Boot references Netty.
我添加到 POM 以使其与 Spanner API 版本 0.22.0-beta 一起使用的内容:
What I added to POM to make it work with Spanner API version 0.22.0-beta:
<代码><属性><v.netty>4.1.13.Final</v.netty></属性>...<依赖管理><依赖项><依赖><groupId>io.netty</groupId><artifactId>netty-codec</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-codec-http</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-codec-http2</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-handler</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-common</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-handler-proxy</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-transport</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-resolver</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-codec-socks</artifactId><version>${v.netty}</version></依赖><依赖><groupId>io.netty</groupId><artifactId>netty-buffer</artifactId><version>${v.netty}</version></依赖></依赖项></dependencyManagement>
如果问题仍然存在,或者它不是一个选项,请使用适当的引导类路径条目运行您的 JVM,例如:
If the problem persists, or if it is not an option, plase run your JVM with appropriate bootclasspath entry, like:
java -Xbootclasspath/p:/tmp/alpn-boot-8.1.11.v20170118.jar -cp ...
确保将 /tmp/alpn-boot-8.1.11.v20170118.jar
替换为 匹配您的 JVM 版本 的 alpn jar 位置,如本页所列: https://www.eclipse.org/jetty/documentation/9.4.x/alpn-chapter.html
Make sure to replace /tmp/alpn-boot-8.1.11.v20170118.jar
with location of alpn jar that matches your JVM version as listed on this page: https://www.eclipse.org/jetty/documentation/9.4.x/alpn-chapter.html
这篇关于Google-Cloud:Jetty ALPN/NPN 未正确配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!