跟我學習dubbo-使用Maven構建Dubbo服務的可執行jar包(4)

Dubbo服務的運行方式: java

一、使用Servlet容器運行(Tomcat、Jetty等)----不可取 spring

缺點:增長複雜性(端口、管理) 浪費資源(內存)apache

官方:服務容器是一個standalone的啓動程序,由於後臺服務不須要Tomcat或JBoss等Web容器的功能,若是硬要用Web容器去加載服務提供方,增長複雜性,也浪費資源。app

二、自建Main方法類來運行(Spring容器) ----不建議(本地調試可用) 框架

缺點: Dobbo自己提供的高級特性沒用上 自已編寫啓動類可能會有缺陷 eclipse

官方:服務容器只是一個簡單的Main方法,並加載一個簡單的Spring容器,用於暴露服務。maven

三、使用Dubbo框架提供的Main方法類來運行(Spring容器)----建議使用 分佈式

優勢:框架自己提供(com.alibaba.dubbo.container.Main學習

可實現優雅停機(ShutdownHook)  ui

官方:服務容器的加載內容能夠擴展,內置了spring, jetty, log4j等加載,可經過Container擴展點進行擴展

Dubbo是經過JDK的ShutdownHook來完成優雅停機的,因此若是用戶使用"kill -9 PID"等強制關閉指令,是不會執行優雅停機的,只有經過"kill PID"時,纔會執行。

原理:

 

  • 服務提供方

    • 中止時,先標記爲不接收新請求,新請求過來時直接報錯,讓客戶端重試其它機器。

    • 而後,檢測線程池中的線程是否正在運行,若是有,等待全部線程執行完成,除非超時,則強制關閉。

  • 服務消費方

    • 中止時,再也不發起新的調用請求,全部新的調用在客戶端即報錯。

    • 而後,檢測有沒有請求的響應尚未返回,等待響應返回,除非超時,則強制關閉。

設置優雅停機超時時間,缺省超時時間是10秒:(超時則強制關閉)

< dubbo:application ...>

     < dubbo:parameter key = "shutdown.timeout" value = "60000" /> <!-- 單位毫秒 -->

</dubbo:application>

若是ShutdownHook不能生效,能夠自行調用:

ProtocolConfig.destroyAll();

打包

傳統的打jar包,大部分人員還在使用eclipse自帶的導出一個jar包,對於傳統的單實例項目是沒有問題的,但對於比較複雜的maven分模塊項目,這種作法就不行了。

下面介紹maven打包方式:

<resources>
            <resource>
                <targetPath>${project.build.directory}/classes</targetPath>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <!-- 結合com.alibaba.dubbo.container.Main,須要重點掌握-->
            <resource>
                <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
                <directory>src/main/resources/spring</directory>
                <filtering>true</filtering>
                <includes>
                    <include>spring-context.xml</include>
                </includes>
            </resource>

 </resources>

官網聲明: Spring Container

  • 自動加載META-INF/spring目錄下的全部Spring配置。

  • 配置:(配在java命令-D參數或者dubbo.properties中)

  • dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加載位置

    因此聲明必須使用maven方式配置才能將spring配置文件打包到META-INF/spring目錄下

引入相關插件:

<plugins>
            <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <classesDirectory>target/classes/</classesDirectory>
                    <archive>
                        <manifest>
                            <mainClass>com.alibaba.dubbo.container.Main</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>

....省略一些配置

</plugins>

重點關注標紅色的配置,容器啓動使用的是容器Main方法啓動,故須要配置

配置好之後,咱們就可使用maven的命令打須要的服務jar包。利用java -jar命令去執行你的jar包,就能夠將服務註冊到你的zookeeper註冊中心了。

 

請各位持續關注《跟我學習dubbo-在Linux操做系統上手工部署Dubbo服務(5)》


1.     項目核心代碼結構截圖

分佈式框架介紹 - kafkaee - kafkaee的博客

   項目模塊依賴

分佈式框架介紹 - kafkaee - kafkaee的博客

特別提醒:開發人員在開發的時候能夠將本身的業務REST服務化或者Dubbo服務化

2.    項目依賴介紹

   2.1 後臺管理系統、Rest服務系統、Scheculer定時調度系統依賴以下圖:

 

分佈式框架介紹 - kafkaee - kafkaee的博客

       2.2 Dubbo獨立服務項目依賴以下圖:

 

分佈式框架介紹 - kafkaee - kafkaee的博客

3.  項目功能部分截圖:

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客
 

zookeeper、dubbo服務啓動

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客
 

dubbo管控臺

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 REST服務平臺

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

相關文章
相關標籤/搜索