Dubbo3 優(yōu)雅停機(jī)

2022-04-02 10:34 更新

讓 Dubbo 服務(wù)完成優(yōu)雅停機(jī)

Dubbo 是通過(guò) JDK 的 ShutdownHook 來(lái)完成優(yōu)雅停機(jī)的,所以如果用戶使用? kill -9 PID ?等強(qiáng)制關(guān)閉指令,是不會(huì)執(zhí)行優(yōu)雅停機(jī)的,只有通過(guò) ?kill PID ?時(shí),才會(huì)執(zhí)行。

原理

服務(wù)提供方

  • 停止時(shí),先標(biāo)記為不接收新請(qǐng)求,新請(qǐng)求過(guò)來(lái)時(shí)直接報(bào)錯(cuò),讓客戶端重試其它機(jī)器。
  • 然后,檢測(cè)線程池中的線程是否正在運(yùn)行,如果有,等待所有線程執(zhí)行完成,除非超時(shí),則強(qiáng)制關(guān)閉。

服務(wù)消費(fèi)方

  • 停止時(shí),不再發(fā)起新的調(diào)用請(qǐng)求,所有新的調(diào)用在客戶端即報(bào)錯(cuò)。
  • 然后,檢測(cè)有沒有請(qǐng)求的響應(yīng)還沒有返回,等待響應(yīng)返回,除非超時(shí),則強(qiáng)制關(guān)閉。

設(shè)置方式

設(shè)置優(yōu)雅停機(jī)超時(shí)時(shí)間,缺省超時(shí)時(shí)間是 10 秒,如果超時(shí)則強(qiáng)制關(guān)閉。

# dubbo.properties
dubbo.service.shutdown.wait=15000

如果 ShutdownHook 不能生效,可以自行調(diào)用:

DubboShutdownHook.destroyAll();
建議
使用 tomcat 等容器部署的場(chǎng)景,建議通過(guò)擴(kuò)展 ContextListener 等自行調(diào)用以下代碼實(shí)現(xiàn)優(yōu)雅停機(jī)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)