Dubbo Main啟動服務容器是一個standalone的啟動程式,因為背景服務不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加載服務提供方,增加複雜性,也浪費資源。
服務容器隻是一個簡單的Main方法,并加載一個簡單的Spring容器,用于暴露服務。
服務容器的加載内容可以擴充,内置了spring, jetty, log4j等加載,可通過Container擴充點進行擴充,參見:Container
Spring Container
如不配置dubbo.spring.config 會自動加載META-INF/spring目錄下的所有Spring配置。
dubbo.spring.config=classpath*:*.xml ----配置spring配置加載位置 如
dubbo.container=log4j,spring
dubbo.application.name=hello-core-service
dubbo.application.owner=coret
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=56432
dubbo.service.loadbalance=roundrobin
dubbo.spring.config=classpath:dubbo-provider.xml
dubbo.log4j.level=DEBUG
dubbo.log4j.level=INFO
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的配置,在多程序啟動時,自動給日志檔案按程序分目錄。
dubbo.log4j.file=/foo/bar.log ----配置日志檔案路徑
dubbo.log4j.level=WARN ----配置日志級别
dubbo.log4j.subdirectory=20880 ----配置日志子目錄,用于多程序啟動,避免沖突
服務啟動
public class CoreLauncher {
private static Logger logger = LoggerFactory.getLogger(CoreLauncher.class);
/**
* @param args
*/
public static void main(String[] args) {
getLocalip();
logger.info("開始啟動asset");
//第一種 通過其他容器啟動如 tomcat ,jboss等 以web服務的形式啟動
// 第二種 通過自定義main函數
/* ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"classpath:dubbo-provider.xml");
context.start();
synchronized (CoreLauncher.class) {
while (true) {
try {
CoreLauncher.class.wait();
} catch (Throwable e) {
}
}
}
*/
//第三種 通過dubbo.container.main 要在classpath目錄下配置 dubbo.properties 相關配置
com.alibaba.dubbo.container.Main.main(args);
}
private static void getLocalip() {
try {
System.out.println("服務暴露的ip: "
+ java.net.InetAddress.getLocalHost().getHostAddress());
} catch (Exception e) {
logger.error(e.getMessage(), e);
}