4

使用 Google Pubsub 列出主题时出现异常,我的 Web 应用程序在 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) ) 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)在io.grpc.netty.NettyChannelBuilder$NettyTransportFactory.newClientTransport(NettyChannelBuilder.java:448)在io.grpc.internal.CallCredentialsApplyingTransportFactory的io.grpc.netty.NettyChannelBuilder$NettyTransportFactory$DynamicNettyTransportParams.getProtocolNegotiator(NettyChannelBuilder.java:499) .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) 在 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) at io.grpc.internal.ChannelExecutor.drain(ChannelExecutor.java:87) at io.grpc.internal.ManagedChannelImpl$LbHelperImpl.runSerialized(ManagedChannelImpl.java:715 ) 在 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) 在 java.lang.Thread.run(Thread.java:745)

4

2 回答 2

2

我在 Netty 版本 4.1.15.Final 中观察到了这个问题,但在 4.1.13.Final 中没有。检查您的传递依赖关系。即 Spring Boot 引用 Netty。

我添加到 POM 以使其与 Spanner API 版本 0.22.0-beta 一起使用:

<properties> <v.netty>4.1.13.Final</v.netty> </properties> ... <dependencyManagement> <dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-codec-http</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-codec-http2</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-handler</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-common</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-handler-proxy</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-resolver</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-codec-socks</artifactId> <version>${v.netty}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-buffer</artifactId> <version>${v.netty}</version> </dependency> </dependencies> </dependencyManagement>

如果问题仍然存在,或者不是一个选项,请使用适当的引导类路径条目运行您的 JVM,例如:

java -Xbootclasspath/p:/tmp/alpn-boot-8.1.11.v20170118.jar -cp ...

确保替换为与此页面上列出的 JVM 版本匹配/tmp/alpn-boot-8.1.11.v20170118.jar的 alpn jar 的位置: https ://www.eclipse.org/jetty/documentation/9.4.x/alpn-chapter.html

于 2017-09-18T10:31:54.627 回答
-1

github上有一个可能的解决方案:“配置SSL时出现异常:”Jetty ALPN/NPN没有正确配置。"

引用上述文档的推荐步骤:

1) 编辑 catalina.sh /usr/local/Cellar/tomcat/8.5.3/libexec/bin/catalina.sh

2) 在第 103 行,添加以下 CATALINA_OPTS="-javaagent:/Library/Tomcat/lib/jetty-alpn-agent-2.0.6.jar"

3)重启tomcat ../bin/shutdown.sh ../bin/startup.sh

于 2017-06-16T18:13:13.520 回答