Dubbo服务的运行方式: java
一、使用Servlet容器运行(Tomcat、Jetty等)----不可取 spring
缺点:增长复杂性(端口、管理) 浪费资源(内存)apache
官方:服务容器是一个standalone的启动程序,由于后台服务不须要Tomcat或JBoss等Web容器的功能,若是硬要用Web容器去加载服务提供方,增长复杂性,也浪费资源。app
二、自建Main方法类来运行(Spring容器) ----不建议(本地调试可用) 框架
缺点: Dobbo自己提供的高级特性没用上 自已编写启动类可能会有缺陷 eclipse
官方:服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。maven
三、使用Dubbo框架提供的Main方法类来运行(Spring容器)----建议使用 分布式
优势:框架自己提供(com.alibaba.dubbo.container.Main) 学习
可实现优雅停机(ShutdownHook) ui
官方:服务容器的加载内容能够扩展,内置了spring, jetty, log4j等加载,可经过Container扩展点进行扩展
Dubbo是经过JDK的ShutdownHook来完成优雅停机的,因此若是用户使用"kill -9 PID"等强制关闭指令,是不会执行优雅停机的,只有经过"kill PID"时,才会执行。
原理:
设置优雅停机超时时间,缺省超时时间是10秒:(超时则强制关闭)
< dubbo:application ...> < dubbo:parameter key = "shutdown.timeout" value = "60000" /> <!-- 单位毫秒 --> </ dubbo:application > 若是ShutdownHook不能生效,能够自行调用: ProtocolConfig.destroyAll(); 打包 : 传统的打jar包,大部分人员还在使用eclipse自带的导出一个jar包,对于传统的单实例项目是没有问题的,但对于比较复杂的maven分模块项目,这种作法就不行了。 下面介绍maven打包方式: <resources> <resource> <targetPath>${project.build.directory}/classes</targetPath> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <!-- 结合com.alibaba.dubbo.container.Main,须要重点掌握--> <resource> <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath> <directory>src/main/resources/spring</directory> <filtering>true</filtering> <includes> <include>spring-context.xml</include> </includes> </resource> </resources> 官网声明: Spring Container
-
自动加载META-INF/spring目录下的全部Spring配置。
-
配置:(配在java命令-D参数或者dubbo.properties中)
-
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加载位置 因此声明必须使用maven方式配置才能将spring配置文件打包到META-INF/spring目录下
引入相关插件: <plugins> <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <classesDirectory>target/classes/</classesDirectory> <archive> <manifest> <mainClass>com.alibaba.dubbo.container.Main</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> </configuration> </plugin> ....省略一些配置 </plugins> 重点关注标红色的配置,容器启动使用的是容器Main方法启动,故须要配置 配置好之后,咱们就可使用maven的命令打须要的服务jar包。利用java -jar命令去执行你的jar包,就能够将服务注册到你的zookeeper注册中心了。 请各位持续关注《跟我学习dubbo-在Linux操做系统上手工部署Dubbo服务(5)》 1. 项目核心代码结构截图  项目模块依赖  特别提醒:开发人员在开发的时候能够将本身的业务REST服务化或者Dubbo服务化 2. 项目依赖介绍 2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖以下图:  2.2 Dubbo独立服务项目依赖以下图:  3. 项目功能部分截图:        zookeeper、dubbo服务启动   dubbo管控台        REST服务平台     |