首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GRPC客户端- Http2Exception:第一个接收到的帧不是设置。前5个字节的十六进制转储: 485454502f

GRPC客户端- Http2Exception:第一个接收到的帧不是设置。前5个字节的十六进制转储: 485454502f
EN

Stack Overflow用户
提问于 2022-08-12 08:35:01
回答 1查看 640关注 0票数 0

我正在用Kotlin / Spring编写一个GRPC客户机。当我连接到提供的GRPC服务器时,会得到以下错误:

代码语言:javascript
运行
复制
io.grpc.StatusException: INTERNAL: http2 exception
    at io.grpc.Status.asException(Status.java:550)
    at io.grpc.kotlin.ClientCalls$rpcImpl$1$1$1.onClose(ClientCalls.kt:296)
    at io.grpc.internal.DelayedClientCall$DelayedListener$3.run(DelayedClientCall.java:468)
    at io.grpc.internal.DelayedClientCall$DelayedListener.delayOrExecute(DelayedClientCall.java:432)
    at io.grpc.internal.DelayedClientCall$DelayedListener.onClose(DelayedClientCall.java:465)
    at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:562)
    at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70)
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:743)
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:722)
    at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
    at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833) Caused by:
io.netty.handler.codec.http2.Http2Exception: First received frame was not SETTINGS. Hex dump for first 5 bytes: 485454502f
    at io.netty.handler.codec.http2.Http2Exception.connectionError(Http2Exception.java:109)
    at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.verifyFirstFrameIsSettings(Http2ConnectionHandler.java:353)
    at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.decode(Http2ConnectionHandler.java:247)
    at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:453)
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:510)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:449)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:279)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    ... 1 common frames omitted

我不拥有或控制GRPC服务。

当我使用grpcurl时,我可以在没有错误的情况下连接:

代码语言:javascript
运行
复制
grpcurl -insecure xxx-yyy.k8s.dev.zzz.com:443 list
grpc.reflection.v1alpha.ServerReflection
zzz.xxx.v2.internal.account.ABCAPI

我已经阅读了关于此错误的其他文章,这些文章似乎表明服务器配置存在问题。但是,由于我能够抓取它,我想知道我的客户端配置中是否有错误。

代码语言:javascript
运行
复制
@Configuration
class GrpcClientConfig() {


    @Bean
    fun grpcClient(grpcChannel: Channel) = GrpcClient(
        channel = grpcChannel
    )


    @Bean
    fun grpcChannel(channelCredentials: ChannelCredentials): Channel = NettyChannelBuilder
        .forAddress("xxx-yyy.k8s.dev.zzz.com", 443, channelCredentials)
        .build()

    @Bean
    fun grpcChannelCredentials(): ChannelCredentials = InsecureChannelCredentials.create()


}

知道为什么grpcurl能工作,但我的Kotlin客户不工作吗?

EN

Stack Overflow用户

发布于 2022-08-28 02:38:04

485454502f从十六进制解码为ascii:

代码语言:javascript
运行
复制
❯ echo '485454502f' | xxd -r -p
HTTP/%

看来您的Kotlin客户端试图建立HTTP/1.1连接,而不是HTTP2。

参见此处描述的类似问题:https://github.com/grpc/grpc-java/issues/2905

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73331402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档