1、使用Servlet容器运行(Tomcat、Jetty等)----不可取
缺点:增加复杂性(端口、管理) 浪费资源(内存)
假设1个服务模块时,需要1台tomcat,消耗3个端口,和200MB左右内存
假设10个服务模块时,需要10台tomcat,消耗30个端口,和2000MB左右内存
假设100个服务模块时,需要100台tomcat,消耗300个端口,和20000MB左右内存
.......大型的分布式项目将不可想象!!!!
2、自建Main方法类来运行(Spring容器) ----不建议(本地调试可用)
缺点:Dobbo本身提供的高级特性没用上
自已编写启动类可能会有缺陷。
比如关闭dubbo的时候,控制台直接点击关闭,如果此时dubbo有服务正在调用,就会导致失败。
代码:
package dubbo.test;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** * @描述: 启动Dubbo服务用的MainClass.*/
public class DubboProvider {private static final Log log = LogFactory.getLog(DubboProvider.class);public static void main(String[] args) {try {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml");context.start();} catch (Exception e) {log.error("== DubboProvider context start error:",e);}synchronized (DubboProvider.class) {while (true) {try {DubboProvider.class.wait();} catch (InterruptedException e) {log.error("== synchronized error:",e);}}}}}
3、使用Dubbo框架提供的Main方法类来运行(Spring容器)----建议使用
优点:框架本身提供(com.alibaba.dubbo.container.Main)
可实现优雅关机(ShutdownHook ) ,即解决第2点关闭dubbo问题。
参见:
dubbo-user-book.pdf 第110~111页
下载地址:
https://www.gitbook.com/@dubbo