如何做到优雅关闭.
1. 关闭dubbo线程池没有用,直接拒绝,除非客户端能够识别到这种拒绝, 业务决定, 可实现优雅关闭.
2. 应该是在调用方通过服务发现,发现这台机器已经下线,不再调用这台机器就可以了. 避免了1方案中无端浪费一次请求
衍生: mq的优雅关闭. 1. 关闭后不再订阅queue,将已有的消费,并上传,然后关闭结束. 待一段时间后分配给另外一台机器. 重新上线后,重新将quque分配给这台机器.
2. 较差的是直接将线程池关闭,导致消息不停拉下来,但无法被消费,直接报错. 消费进度也无法前进,也无法变成retrymq. 可行,但消息被多余拉取了.
参考文章 : http://blog.csdn.net/hzzhoushaoyu/article/details/46673571
Daemon Thread [DubboServerHandler-10.0.83.144:10871-thread-5] (Suspended (breakpoint at line 270 in TradeCoreRemoteServiceImpl))
TradeCoreRemoteServiceImpl.transfer(TransferRpcParam) line: 270Wrapper9.invokeMethod(Object, String, Class[], Object[]) line: not available
JavassistProxyFactory$1.doInvoke(T, String, Class<?>[], Object[]) line: 46
JavassistProxyFactory$1(AbstractProxyInvoker<T>).invoke(Invocation) line: 72
RegistryProtocol$InvokerDelegete<T>(InvokerWrapper<T>).invoke(Invocation) line: 53
KpayDubboProviderFilter.invoke(Invoker<?>, Invocation) line: 71
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
ProviderContextSwitchFilter.invoke(Invoker<?>, Invocation) line: 67
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
ExceptionFilter.invoke(Invoker<?>, Invocation) line: 64
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
TimeoutFilter.invoke(Invoker<?>, Invocation) line: 42
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
MonitorFilter.invoke(Invoker<?>, Invocation) line: 75
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
TraceFilter.invoke(Invoker<?>, Invocation) line: 78
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
ContextFilter.invoke(Invoker<?>, Invocation) line: 60
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
GenericFilter.invoke(Invoker<?>, Invocation) line: 112
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
ClassLoaderFilter.invoke(Invoker<?>, Invocation) line: 38
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
EchoFilter.invoke(Invoker<?>, Invocation) line: 38
ProtocolFilterWrapper$1.invoke(Invocation) line: 91
DubboProtocol$1.reply(ExchangeChannel, Object) line: 108
HeaderExchangeHandler.handleRequest(ExchangeChannel, Request) line: 84
HeaderExchangeHandler.received(Channel, Object) line: 170
DecodeHandler.received(Channel, Object) line: 52
ChannelEventRunnable.run() line: 82
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145
ThreadPoolExecutor$Worker.run() line: 615
Thread.run() line: 722 [local variables unavailable]