dubbo 服務的呼叫堆疊-- 學習dubbo啟動後執行邏輯和程式碼
阿新 • • 發佈:2019-02-05
如何做到優雅關閉.
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]