2016-05-11 7 views
0

Ich verwende grpc für meine API-Entwicklung.Abrufen von IllegalStateException beim Starten des Grpc-Servers

Ich konnte APIs bisher erstellen und zugreifen.

Plötzlich sehe ich diese Ausnahme Stack-Trace kontinuierlich etwa 5 Sekunden nach der Meldung "INFO: Server gestartet. Abhören von Port 42420" angezeigt wird.

Ich habe dieses Projekt bereitgestellt und den Server auf eine GCE-Instanz gebracht. Bitte lassen Sie mich den Grund und die Lösung für dieses Problem wissen, wenn es jemand zuvor gesehen hat.

Stapelüberwachung:

May 11, 2016 7:14:20 AM io.grpc.internal.AbstractServerStream deframeFailed 
WARNING: Exception processing message 
java.lang.IllegalStateException: MessageDeframer is already closed 
    at com.google.common.base.Preconditions.checkState(Preconditions.java:173) 
    at io.grpc.internal.MessageDeframer.checkNotClosed(MessageDeframer.java:222) 
    at io.grpc.internal.MessageDeframer.deframe(MessageDeframer.java:168) 
    at io.grpc.internal.AbstractStream.deframe(AbstractStream.java:283) 
    at io.grpc.internal.AbstractServerStream.inboundDataReceived(AbstractServerStream.java:199) 
    at io.grpc.netty.NettyServerStream.inboundDataReceived(NettyServerStream.java:77) 
    at io.grpc.netty.NettyServerHandler.onDataRead(NettyServerHandler.java:234) 
    at io.grpc.netty.NettyServerHandler.access$300(NettyServerHandler.java:95) 
    at io.grpc.netty.NettyServerHandler$FrameListener.onDataRead(NettyServerHandler.java:443) 
    at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder$FrameReadListener.onDataRead(DefaultHttp2ConnectionDecoder.java:236) 
    at io.netty.handler.codec.http2.Http2InboundFrameLogger$1.onDataRead(Http2InboundFrameLogger.java:46) 
    at io.netty.handler.codec.http2.DefaultHttp2FrameReader.readDataFrame(DefaultHttp2FrameReader.java:409) 
    at io.netty.handler.codec.http2.DefaultHttp2FrameReader.processPayloadState(DefaultHttp2FrameReader.java:240) 
    at io.netty.handler.codec.http2.DefaultHttp2FrameReader.readFrame(DefaultHttp2FrameReader.java:147) 
    at io.netty.handler.codec.http2.Http2InboundFrameLogger.readFrame(Http2InboundFrameLogger.java:39) 
    at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.decodeFrame(DefaultHttp2ConnectionDecoder.java:102) 
    at io.netty.handler.codec.http2.Http2ConnectionHandler$FrameDecoder.decode(Http2ConnectionHandler.java:515) 
    at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:575) 
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:360) 
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244) 
    at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:83) 
    at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:163) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:155) 
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:950) 
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:125) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:510) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:467) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:381) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:742) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 

Antwort

0

Der Fehler scheint wie this issue. Der Benutzer, bei dem das Problem aufgetreten ist, befand sich aufgrund eines Diensts, auf den Clients zugreifen, aber nicht implementiert wurde, mit der Ausnahme, aber es gibt andere mögliche Auslöser. Das Update ist fast festgeschrieben und sollte in der nächsten Version behoben werden.

0

Ich habe das ähnliche Problem, weil in meiner Service-Implementierung habe ich so etwas wie unten,

@Override 
public void myMethod(
    //super.myMethod(myRequest, responseObserver);// removing this line resolved my issue. 
    ... 
    responseObserver.onNext(response); // I had exception here because of the super.myMethod call. 
    ... 
} 

Ich dachte, es war gut, die Basisimplementierung zu rufen und dann meine Implementierung zu tun. Aber das scheint keine gute Idee zu sein.

Ich hoffe, das spart jemand Zeit.