博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建Dubbo服务的可执行jar包
阅读量:6515 次
发布时间:2019-06-24

本文共 3917 字,大约阅读时间需要 13 分钟。

hot3.png

Dubbo 服务的运行方式

使用Servlet 容器运行(Tomcat 、Jetty 等)

    不可取 缺点如下:

  • 增加复杂性(端口、管理)
  • 浪费资源(内存)

 自建Main 方法类来运行(Spring 容器)

    不建议 (可用于测试、但是测试最好使用Junit) 缺点如下:

  •  Dobbo 本身提供的高级特性没用上
  • 自已编写启动类可能会有缺陷
  • Junit测试代码可以如下写
    @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:spring/spring-context.xml")public class DubboProvider {	 @Test	 public void testStartRrgistry(){		 System.out.println("-----------1");		 synchronized (DubboProvider.class) {				while (true) {					System.out.println("-----------2");					try {						DubboProvider.class.wait();					} catch (InterruptedException e) {						e.printStackTrace();					}				}			}	 }}

     

  • main方法的测试
  • 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);				}			}		}	}    }

     

使用Dubbo 框架提供的Main 方法类来运行(Spring 容器)

    推荐使用,优点如下:

  • 框架本身提供(com.alibaba.dubbo.container.Main)
  • 可实现优雅关机(ShutdownHook)
    • Dubbo是通过JDK的ShutdownHook来完成优雅停机的,所以如果用户使用"kill -9 PID"等强制关闭指令,是不会执行优雅停机的,只有通过"kill PID"时,才会执行。
    • 服务提供方
      • 停止时,先标记为不接收新请求,新请求过来时直接报错,让客户端重试其它机器。
      • 然后,检测线程池中的线程是否正在运行,如果有,等待所有线程执行完成,除非超时,则强制关闭。
    • 服务消费方
      • 停止时,不再发起新的调用请求,所有新的调用在客户端即报错。
      • 然后,检测有没有请求的响应还没有返回,等待响应返回,除非超时,则强制关闭。
    • 设置优雅停机超时时间,缺省超时时间是10秒:(超时则强制关剂机)

       

    • 如果ShutdownHook不能生效,可以自行调用:
      ProtocolConfig.destroyAll();

       

    spring Container 加载

        这里只讲Spring Container,如果更多的加载可以去dubbo官网查看。自动加载META-INF/spring目录下的所有Spring配置。

  • 配置:(配在java命令-D参数或者dubbo.properties中)
    • dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加载位置
  • 基于maven的实现
    • 在build的resources增加(注意:发现resource没有继承,待研究)
      ${project.build.directory}/classes/META-INF/spring
      src/main/resources/spring
      true
      spring-context.xml

       

    • 在build的plugins增加
      org.apache.maven.plugins
      maven-jar-plugin
      3.0.2
      target/classes/
      com.alibaba.dubbo.container.Main
      false
      true
      lib/
      .
      org.apache.maven.plugins
      maven-dependency-plugin
      2.10
      copy-dependencies
      package
      copy-dependencies
      jar
      jar
      false
      ${project.build.directory}/lib

       

    • 修改Spring的配置文件(例如:spring-context.xml),修改其中的import路径:
    • 因为maven的pom配置文件中指定了配置文件打包的存放路径

转载于:https://my.oschina.net/longload/blog/717353

你可能感兴趣的文章
在Android中创建文件
查看>>
爬虫基础
查看>>
JS组件系列——再推荐一款好用的bootstrap-select组件,亲测还不错
查看>>
CNN网络--AlexNet
查看>>
getopt--parse command line options
查看>>
闭包和OC的block的本质
查看>>
每天一个linux命令(34):du 命令
查看>>
SpringBoot配置属性之MVC
查看>>
MySQL出现Waiting for table metadata lock的场景浅析
查看>>
两个PDF同时在Mac上阅读是一种什么样的体验
查看>>
C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)
查看>>
Hadoop(一)之初识大数据与Hadoop
查看>>
什么是数据埋点?
查看>>
git回滚
查看>>
vue2.0 引用qrcode.js实现获取改变二维码的样式
查看>>
Python 判断闰年,判断日期是当前年的第几天
查看>>
activiti 清库脚本(转)
查看>>
如何快速查看服务器配置信息?
查看>>
caffe blob理解
查看>>
特殊字符校验
查看>>