Dubbo服務的運作方式
1、使用Servlet容器運作(Tomcat) ----- 不可取
缺點:增加複雜性(端口、管理)
浪費資源(記憶體)
2、自建Main方法類來運作(Spring容器) -----不建議(本地調試可用)
缺點:Dubbo本身提供的進階特性沒用上
自己編寫啟動類可能會有缺陷
3、使用Dubbo架構提供的Main方法類來運作(Spring容器) -----建議使用
優點:架構本身提供(com.alibaba.dubbo.container.Main)
可實作優雅關機(ShutdownHook)
優雅關機
1、簡介
Dubbo是通過JDK的ShutdownHook來完成優雅停機的,是以如果使用者使用"kill -9 PID"等強制關閉指令,是不會執行優雅停機的,隻有通過"kill PID"時,才會執行。
原理:
服務提供方
停止時,先标記為不接收新請求,新請求過來時直接報錯,讓用戶端重試其它機器。
然後,檢測線程池中的線程是否正在運作,如果有,等待所有線程執行完成,除非逾時,則強制關閉。
服務消費方
停止時,不再發起新的調用請求,所有新的調用在用戶端即報錯。
然後,檢測有沒有請求的響應還沒有傳回,等待響應傳回,除非逾時,則強制關閉。
設定優雅停機逾時時間,預設逾時時間是10秒:(逾時則強制關閉)
如果ShutdownHook不能生效,可以自行調用:
1、自動加載META-INF/spring目錄下的所有Spring配置。
2、配置:(配在java指令-D參數或者dubbo.properties中)
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加載位置
2、pom.xml中build
注意:
spring-context.xml中:
這裡建構的jar所引用的其它jar在與此jar同級的lib檔案夾中
檔案結構:

上面的外部引用jar包放在lib檔案夾中,下面我們來介紹一種内置打包的方法: