網上相關的帖子很多,主要方法也都是加鉤子hook,這裡我對優雅停機進行了實踐
目前不管是dubbox、apache的dubbo、alibaba的dubbo都沒有實現真正意義上的優雅停機(截止20191231)
標紅是重點,目前jar中自帶的hook並不能滿足先從註冊中心移除、再銷毀容器的順序,且啟用hook需要在jvm變數(啟動引數)中配置dubbo.shutdown.hook=true引數
這裡我通過監聽事件,在spring容器初始化後,自己註冊了乙個hook,new tpspshutdownhook()
@slf4j
@sneakythrows
@override
if(event instanceof contextrefreshedevent)
log.info("##############################");
log.info("##############################");
log.info("#### spring is refreshed #####");
runtime.getruntime().addshutdownhook(new tpspshutdownhook());
log.info("##############################");
}else if(event instanceof contextclosedevent)
}}
tpspshutdownhook.class
@slf4j
public class tpspshutdownhook extends thread catch (exception e)
}}
具體的就是改造了protocolconfig的**,先從註冊中心移除提供者,然後再銷毀各埠協議
public static void destroyall() catch (interruptedexception e)
extensionloaderloader = extensionloader.getextensionloader(protocol.class);
for (string protocolname : loader.getloadedextensions())
} catch (throwable t)
}log.info("#dubbo is destroyed#");
}
Dubbo 優雅停機
對於任何乙個線上應用,如何在服務更新部署過程中保證客戶端無感知是開發者必須要解決的問題,即從應用停止到重啟恢復服務這個階段不能影響正常的業務請求。理想條件下,在沒有請求的時候再進行更新是最安全可靠的,然而網際網路應用必須要保證可用性,因此在技術層面上優化應用更新流程來保證服務在更新時無損是必要的。傳...
Dubbo優雅停機
對於任何乙個線上應用,如何在服務更新部署過程中保證客戶端無感知是開發者必須要解決的問題,即從應用停止到重啟恢復服務這個階段不能影響正常的業務請求。理想條件下,在沒有請求的時候再進行更新是最安全可靠的,然而網際網路應用必須要保證可用性,因此在技術層面上優化應用更新流程來保證服務在更新時無損是必要的。傳...
dubbo學習四 優雅停機
目錄 1 dubbo優雅停機概述 2 dubbo優雅停機實現 2.1 abstractregistryfactory.destroyall 2.1.1 registry.destroy zookeeperregistry 2.1.2 registry.destroy failbackregistry...