服務容器是一個standalone的啓動程序,因爲後臺服務不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加載服務提供方,增加複雜性,也浪費資源。
服務容器只是一個簡單的Main方法,並加載一個簡單的Spring容器,用於暴露服務。
服務容器的加載內容可以擴展,內置了spring, jetty, log4j等加載,可通過Container擴展點進行擴展,參見:Container
Spring Container
自動加載META-INF/spring目錄下的所有Spring配置。
配置:(配在java命令-D參數或者dubbo.properties中)
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加載位置
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
public class SpringContainer implements Container {
private static final Logger logger = LoggerFactory.getLogger(SpringContainer.class);
public static final String SPRING_CONFIG = "dubbo.spring.config";
public static final String DEFAULT_SPRING_CONFIG = "classpath*:spring/*.xml";
static ClassPathXmlApplicationContext context;
public static ClassPathXmlApplicationContext getContext() {
return context;
}
public void start() {
String configPath = ConfigUtils.getProperty(SPRING_CONFIG);
if (configPath == null || configPath.length() == 0) {
configPath = DEFAULT_SPRING_CONFIG;
}
context = new ClassPathXmlApplicationContext(configPath.split("[,\\s]+"));
context.start();
}
public void stop() {
try {
if (context != null) {
context.stop();
context.close();
context = null;
}
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
}
測試:
package cn.gooday.service.order.provider;
import cn.gooday.framework.HelperLoader;
/**
* 主線程啓動
*/
public class TestMain {
public static void main(String[] args) throws Exception {
com.alibaba.dubbo.container.Main.main(args);
}
}
Dubbo啓動方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
使用dubbo+zookeeper創建一個小應用
polo_longsan
2018-08-27 19:46:16
Dubbo服務只訂閱和只註冊
周周_ZHANG
2018-08-27 19:23:06
Dubbo服務接口的設計原則
周周_ZHANG
2018-08-27 19:23:06
Dubbo服務集羣容錯配置
周周_ZHANG
2018-08-27 19:23:06
Dubbo服務啓動依賴檢查
周周_ZHANG
2018-08-27 19:23:05
Dubbo直連提供者
周周_ZHANG
2018-08-27 19:23:05
Spring+Dubbo+Zookeeper框架搭建–<三>服務註冊示例
auleit
2018-08-27 19:17:02
Spring+Dubbo+Zookeeper框架搭建--<一>Zookeeper安裝
auleit
2018-08-27 19:17:01
linux下zookeeper環境搭建以及dubbo-admin的編譯與部署
俺叫赵小邪
2018-08-27 18:24:27
普通項目改造成Dubbo項目
闪电猪猪侠
2018-08-27 18:20:18
zookeeper註冊中心安裝
闪电猪猪侠
2018-08-27 18:20:14
Linux下的ZooKeeper安裝(單機環境和集羣以及啓動時出現的異常)
banana味儿的香蕉
2018-08-27 05:07:46
Dubbo源碼分析(四)Handler & Filter
jason07409
2018-08-27 02:12:59
Dubbo源碼分析(一)啓動Provider
jason07409
2018-08-27 02:12:54
Dubbo源碼分析(五)ExtensionLoader
jason07409
2018-08-27 02:12:54
24小時熱門文章