天天看點

學習dubbo(五):使用maven建構dubbo服務的可執行的jar

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檔案夾中

檔案結構:

學習dubbo(五):使用maven建構dubbo服務的可執行的jar

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

繼續閱讀