java - 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)
异常翻译:“远程主机强行断开现有连接”
我很有趣,我如何管理客户端和服务器的连接/断开连接事件?
也许有一些方法可以将我自己的侦听器附加到客户端或服务器?从消息来源我不知道如何制作它
解决方案
gRPC 不会故意提供连接级别的通知。您没有提及您的用例,但绝大多数用例都被负载平衡、代理和 gRPC 的重新连接逻辑所破坏。
有一种方法可以确定 Channel 是否健康,viaManagedChannel.getState(false)
可以为用户提供 UI 或告诉其他客户端服务器不健康。其他用例应该建立在单独的 RPC 上。
推荐阅读
- javascript - 谁能告诉我为什么我无法从待办事项列表中删除项目?
- javascript - How to pass formarray to other component
- c# - How to write a test case for abstract class method
- url - 如何防止在 PWA 中打开多个带有深层链接的浏览器窗口?
- javascript - 如何在 ReactJS 中重定向到新页面,例如 www.google.com,例如单击按钮 window.location.href
- python-3.x - Python3代码使用IO而不是String IO上传到S3存储桶
- css - CSS - 使项目从上一行的中间开始
- javascript - 无法使用下面的代码循环对象数组在 for 循环中获得正确的输出,它只采用最后一个条件
- javascript - 具有标题组时,ag-grid 无法移动列
- javascript - 带有自定义区域的 JS 世界地图插件