Dubbo 應用容器


Dubbo的容器模塊,是一個獨立的容器,因為服務通常不需要Tomcat/JBoss等Web容器的特性,沒必要用Web容器去加載服務。

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

我們看啟動生產者、消費者、簡單監控者的 start.sh 命令中,可以看到啟動命令如下:

nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &

這里啟動的就是 com.alibaba.dubbo.container.Main 類的 public static void main(String[] args) { …  }  方法。

 

服務容器的加載內容可以擴展,內置了spring, jetty, log4j等加載,可通過Container擴展點進行擴展,參見:http://dubbo.io/Developer+Guide.htm#DeveloperGuide-ContainerSPI 

 

Spring Container


自動加載META-INF/spring目錄下的所有Spring配置。
配置:(配在java命令-D參數或者dubbo.properties中)
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加載位置Container


Jetty Container


啟動一個內嵌Jetty,用於匯報狀態。
配置:(配在java命令-D參數或者dubbo.properties中)
dubbo.jetty.port=8080 ----配置jetty啟動端口
dubbo.jetty.directory=/foo/bar ----配置可通過jetty直接訪問的目錄,用於存放靜態文件
dubbo.jetty.page=log,status,system ----配置顯示的頁面,缺省加載所有頁面

 

Log4j Container


自動配置log4j的配置,在多進程啟動時,自動給日志文件按進程分目錄。
配置:(配在java命令-D參數或者dubbo.properties中)
dubbo.log4j.file=/foo/bar.log ----配置日志文件路徑
dubbo.log4j.level=WARN ----配置日志級別
dubbo.log4j.subdirectory=20880 ----配置日志子目錄,用於多進程啟動,避免沖突

 

容器啟動

如:(缺省只加載spring) 
java com.alibaba.dubbo.container.Main

或:(通過main函數參數傳入要加載的容器)
java com.alibaba.dubbo.container.Main spring jetty log4j

或:(通過JVM啟動參數傳入要加載的容器)
java com.alibaba.dubbo.container.Main -Ddubbo.container=spring,jetty,log4j

或:(通過classpath下的dubbo.properties配置傳入要加載的容器)
dubbo.properties
dubbo.container=spring,jetty,log4j

 

在web容器中使用內置的監控頁面

    <filter>
        <filter-name>resource</filter-name>
        <filter-class>com.alibaba.dubbo.container.page.ResourceFilter</filter-class>
    </filter>
 
    <servlet>
        <servlet-name>page</servlet-name>
        <servlet-class>com.alibaba.dubbo.container.page.PageServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>page</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
 
    <filter-mapping>
        <filter-name>resource</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

參考:

http://dubbo.io/Service+Container.htm

 

擴展容器功能

擴展容器功能, 參考: http://dubbo.io/Container+SPI.htm

擴展容器類功能需要實現 com.alibaba.dubbo.container.Container 接口。

 

容器的啟動

不論生產者、消費者、簡單監控 他們的啟動 start.sh 命令都是完全一樣的。 整個 bin 目錄下的文件是完全一樣的。

在 start.sh 中,我們看到的  -classpath  ****  com.alibaba.dubbo.container.Main

nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &

可以證明我們啟動的是 com.alibaba.dubbo.container.Main 類的 main 方法。

 

Java 命令行參數說明

我們這里用到的 Java 命令行參數說明:

java -classpath /home/user/myprogram org.mypackage.HelloWorld 

其中:
-classpath /home/user/myprogram 這個參數,指定了程序中要用到的包所在的路徑。(在Linux系統中,是這樣表達, -classpath /home/user/myprogram)
org.mypackage.HelloWorld 這是主類的名稱

http://developer.51cto.com/art/201209/357217.htm

-classpath

虛擬機在運行一個類時,需要將其裝入內存,虛擬機搜索類的方式和順序如下:Bootstrap classes,Extension classes,User classes

Bootstrap 是虛擬機自帶的 jar 或 zip 文件,虛擬機首先搜索這些包文件,用System.getProperty("sun.boot.class.path")可得到虛擬機搜索的包名。
Extension 是位於 jre/lib/ext 目錄下的 jar 文件,虛擬機在搜索完 Bootstrap后就搜索該目錄下的 jar 文件。用System. getProperty("java.ext.dirs”)可得到虛擬機使用Extension 搜索路徑。
User classes 搜索順序為當前目錄、環境變量 CLASSPATH、-classpath。

告知虛擬機搜索目錄名、jar 文檔名、zip 文檔名,之間用分號;分隔。例如當你自己開發了公共類並包裝成一個 common.jar 包,在使用 common.jar 中的類時,就需要用-classpath common.jar 告訴虛擬機從 common.jar 中查找該類,否則虛擬機就會拋出 java.lang.NoClassDefFoundError異常,表明未找到類定義。在運行時可用 System.getProperty(“java.class.path”)得到虛擬機查找類的路徑。

使用-classpath 后虛擬機將不再使用 CLASSPATH 中的類搜索路徑,如果-classpath 和 CLASSPATH 都沒有設置,則虛擬機使用當前路徑(.)作為類搜索路徑。推薦使用-classpath 來定義虛擬機要搜索的類路徑,而不要使用環境變量 CLASSPATH 的搜索路徑,以減少多個項目同時使用 CLASSPATH 時存在的潛在沖突。例如應用 1 要使用a1.0.jar 中的類 G,應用 2 要使用 a2.0.jar 中的類 G,a2.0.jar 是 a1.0.jar 的升級包,當a1.0.jar,a2.0.jar 都在 CLASSPATH 中,虛擬機搜索到第一個包中的類 G 時就停止搜索, 如果應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。

javac -classpath .;jar01.jar;jar02.jar;……;jarN.jar class_name.java :使用-classpath選項,指定了在編譯Java源代碼時,用到類庫的位置。一般用於該類庫不在當前CLASSPATH的環境變量中。

 

參考:

http://developer.51cto.com/art/201209/357217.htm

http://my.oschina.net/xianggao/blog/88492

 

具體服務的啟動

至於具體的啟動的服務,則跟Spring有關。在完成默認必須加載的 Spring 之后, 根據我們的配置,加載暴露具體的服務。

相關的配置或者代碼啟動服務請看: http://dubbo.io/Configs-zh.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM