dubbo 重启时抛错.优雅停机方案解决or

本文探讨了Dubbo框架中出现的远程调用超时问题及其根本原因,特别是NettyChannel在shutdownHook期间被提前关闭的情况。分析了连接池管理、TCP关闭行为以及Dubbo服务端如何检测并处理客户端关闭事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:

nettyChannel 再 shutDown hook 时被提前关闭了.

因为先关 dubbo 入口,最后关 dubbo 调用出口. 故这种情况下,连接池还不能共用. 不能像 zk 那样,因为对等,关掉一个. tcp close 关掉代表.不再写.

不再写,为什么会出现 readTimeOut 的情况呢? 配置了 dubbo 超时时间. 可能 duubo 的关闭是双向关闭? 这个是 tcp 控制的. dubbo sever 端只能进行连接池空闲检测回收.?

多久一次? 有 netty 控制?

netty 服务端  监听客户端关闭关闭事件? 查下 netty 的 nio 的事件机制,有没有客户端的关闭事件. 然后怎么处理的.?

这种 callBack 可以有,也可以没有,完全看下层的实现. 父类,下层. (http://blog.youkuaiyun.com/jiangguilong2000/article/details/7861754

Q1:服务器主动关闭连接后,客户端没有监听到socket关闭的事件。

)


1.这种是每次请求抛错.

2. 还有一种是直接发现已经 close,抛错.

2017-03-30 14:22:02 673,hostName=.com,Remote invoke com..liangjian.order.api.OrderRemotingService@.getByOrderId error. args:[414162054], resp:dubbo return null object., time:1174,Flag=6445603358dca406fdba65521f104686

com.alibaba.dubbo.rpc.RpcException: Invoke remote method timeout. method: getByOrderId, provider  /com..liangjian.order.api.OrderRemotingService
    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.doInvoke(DubboInvoker.java:100)
    at com.alibaba.dubbo.rpc.protocol.AbstractInvoker.invoke(AbstractInvoker.java:144)
    at com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper.invoke(ListenerInvokerWrapper.java:74)
    at com..framework.dubbo.ZipkinDubboConsumerFilter.invoke(ZipkinDubboConsumerFilter.java:129)
    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    at com..liangjian.pay.common.dubbo.TradeConsumerFilter.invoke(PayConsumerFilter.java:79)
    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    at com..framework.dubbo.ConsumerLogStaticFilter.invoke(ConsumerStaticFilter.java:66)
    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    at com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:53)
    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    at com.alibaba.dubbo.rpc.filter.ConsumerContextFilter.invoke(ConsumerContextFilter.java:48)
    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
    at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:77)
    at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:227)
    at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72)
    at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52)
    at com.alibaba.dubbo.common.bytecode.proxy0.getByOrderId(proxy0.java)
    at com.integration.impl.IntegrationService.getOrderById(OrderIntegrationServiceImpl.java:192)
   
    at com.alibaba.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService$ConsumeRequest.run(ConsumeMessageConcurrentlyService.java:160)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout. start time: 2017-03-30 14:22:01.484, end time: 2017-03-30 14:22:02.658, client elapsed: 0 ms, server elapsed: 1174 ms, timeout: 1000 ms, request: Request [id=10511237, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=getByOrderId, parameterTypes=[class java.lang.Long], arguments=[414162054], attachments={flag=6445603358dca406fdba65521f104686, token=true, path=com..liangjian.order.api.OrderRemotingService, zipkin.sampleJudgement=noSample, interface=com..liangjian.order.api.OrderRemotingService, version=1.0.0}]], channel: /:5257 -> /:710
    at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:107)
    at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:84)
    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.doInvoke(DubboInvoker.java:97)
    ... 38 more
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值