美文网首页
grpc java client, go server 错误 i

grpc java client, go server 错误 i

作者: DJN_ | 来源:发表于2019-11-14 15:28 被阅读0次

    java client 获取 channel 的代码如下:

        public ManagedChannel getChannel() {
            ManagedChannel channel = ManagedChannelBuilder.forAddress(config.getGrpc().getHost(), config.getGrpc().getPort())
                    .disableRetry()
                    .idleTimeout(2, TimeUnit.SECONDS)
                    .build();
            return channel;
        }
    

    Sping boot 报如下错,没有任何其它提示。

    [2019-11-14 15:15:02] [ERROR] o.a.c.c.C.[.[.[.[dispatcherServlet] [DirectJDKLog.java:175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is io.grpc.StatusRuntimeException: UNAVAILABLE: io exception] with root cause
    java.io.IOException: 远程主机强迫关闭了一个现有的连接。
        at sun.nio.ch.SocketDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
        at sun.nio.ch.IOUtil.read(IOUtil.java:192)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
        at io.grpc.netty.shaded.io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
        at io.grpc.netty.shaded.io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1108)
        at io.grpc.netty.shaded.io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:345)
        at io.grpc.netty.shaded.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
        at io.grpc.netty.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:646)
        at io.grpc.netty.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:581)
        at io.grpc.netty.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498)
        at io.grpc.netty.shaded.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
        at io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
        at io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
    

    go server 不设置 logger 连日志都没有,加了日志输出如下错误:

    2019/11/14 15:14:12 rpc server listeing on :50051
    log from Warningln
    [grpc: Server.Serve failed to create ServerTransport:  connection error: desc = "transport: http2Server.HandleStreams received bogus greeting from client: \"\\x16\\x03\\x01\\x00\\x94\\x01\\x00\\x00\\x90\\x03\\x03\\xd7\\xf9\\x81\\x8cf\\xa8\\xeb\\xcc{\\xb2r\\x19N\""]
    log from Warningln
    [grpc: Server.Serve failed to create ServerTransport:  connection error: desc = "transport: http2Server.HandleStreams received bogus greeting from client: \"\\x16\\x03\\x01\\x00\\x94\\x01\\x00\\x00\\x90\\x03\\x03\\xadt\\xcb\\xed\\x1c\\xab~˺\\xe5\\x8dM\\x14\""]
    log from Warningln
    [grpc: Server.Serve failed to create ServerTransport:  connection error: desc = "transport: http2Server.HandleStreams received bogus greeting from client: \"\\x16\\x03\\x01\\x00\\x94\\x01\\x00\\x00\\x90\\x03\\x03Cm:\\x0e\\xf8Ǭ8\\a\\xdb[3\\x95\""]
    

    断点和源码找到输出这个日志的地方: google.golang.org/grpc/internal/transport/http2_server.go

    微信截图_20191114152044.png
    原因是 preface 和源码中的 clientPreface 不相等,clientPreface 是这个: []byte(http2.ClientPreface)ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

    快去看看 ClientPreface 是什么:


    微信截图_20191114152523.png

    stackoverflow 说创建 Channel 时要加 usePlaintext,。好吧~。

    相关文章

      网友评论

          本文标题:grpc java client, go server 错误 i

          本文链接:https://www.haomeiwen.com/subject/fsurictx.html