GRPC连接状态侦听器Java

时间:2018-06-21 14:18:16

标签: java grpc grpc-java

我很有趣-我可以通知一些有关GRPC客户端/服务器的连接/断开事件吗? 现在,当客户端终止与服务器的连接时,服务器上出现异常:

июн 22, 2018 9:34:47 AM io.grpc.netty.NettyServerTransport notifyTerminated
INFO: Transport failed
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.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1108)
    at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:345)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:745)

异常翻译:“远程主机强行断开了现有连接”

我很有趣,我该如何管理客户端和服务器的连接/断开事件?

也许有一些方法可以将我自己的侦听器附加到客户端或服务器?从来源来看,我不知道该怎么做

1 个答案:

答案 0 :(得分:1)

gRPC故意不提供连接级通知。您没有提到用例,但是绝大多数用例都被负载平衡,代理和gRPC的重新连接逻辑所破坏。

有一种方法可以通过ManagedChannel.getState(false)来确定Channel是否正常,这对于为用户提供UI或告诉其他客户端服务器不正常非常有用。其他用例应建立在各个RPC上。