分布式服务框架dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
2018-01-03 02:11
567 查看
Dubbo服务的运行方式:
1、使用Servlet容器运行(Tomcat、Jetty等)----不可取
缺点:增加复杂性(端口、管理) 浪费资源(内存)
官方:服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源。
2、自建Main方法类来运行(Spring容器) ----不建议(本地调试可用)
缺点: Dobbo本身提供的高级特性没用上 自已编写启动类可能会有缺陷
官方:服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。
3、使用Dubbo框架提供的Main方法类来运行(Spring容器)----建议使用
优点:框架本身提供(com.alibaba.dubbo.container.Main)
可实现优雅停机(ShutdownHook)
官方:服务容器的加载内容可以扩展,内置了spring, jetty, log4j等加载,可通过Container扩展点进行扩展
Dubbo是通过JDK的ShutdownHook来完成优雅停机的,所以如果用户使用"kill -9 PID"等强制关闭指令,是不会执行优雅停机的,只有通过"kill PID"时,才会执行。
原理:
服务提供方
停止时,先标记为不接收新请求,新请求过来时直接报错,让客户端重试其它机器。
然后,检测线程池中的线程是否正在运行,如果有,等待所有线程执行完成,除非超时,则强制关闭。
服务消费方
停止时,不再发起新的调用请求,所有新的调用在客户端即报错。
然后,检测有没有请求的响应还没有返回,等待响应返回,除非超时,则强制关闭。
设置优雅停机超时时间,缺省超时时间是10秒:(超时则强制关闭)
官网声明: 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注册中心了。
1、使用Servlet容器运行(Tomcat、Jetty等)----不可取
缺点:增加复杂性(端口、管理) 浪费资源(内存)
官方:服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源。
2、自建Main方法类来运行(Spring容器) ----不建议(本地调试可用)
缺点: Dobbo本身提供的高级特性没用上 自已编写启动类可能会有缺陷
官方:服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。
3、使用Dubbo框架提供的Main方法类来运行(Spring容器)----建议使用
优点:框架本身提供(com.alibaba.dubbo.container.Main)
可实现优雅停机(ShutdownHook)
官方:服务容器的加载内容可以扩展,内置了spring, jetty, log4j等加载,可通过Container扩展点进行扩展
Dubbo是通过JDK的ShutdownHook来完成优雅停机的,所以如果用户使用"kill -9 PID"等强制关闭指令,是不会执行优雅停机的,只有通过"kill PID"时,才会执行。
原理:
服务提供方
停止时,先标记为不接收新请求,新请求过来时直接报错,让客户端重试其它机器。
然后,检测线程池中的线程是否正在运行,如果有,等待所有线程执行完成,除非超时,则强制关闭。
服务消费方
停止时,不再发起新的调用请求,所有新的调用在客户端即报错。
然后,检测有没有请求的响应还没有返回,等待响应返回,除非超时,则强制关闭。
设置优雅停机超时时间,缺省超时时间是10秒:(超时则强制关闭)
</
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注册中心了。
相关文章推荐
- SpringBank 开发日志 使用maven构建dubbo服务的可执行jar包
- 跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
- 使用maven构建dubbo服务的可执行jar包
- 使用maven 构建dubbo服务的可执行jar包
- Dubbo服务的运行方式(使用maven构建dubbo可执行的jar包)
- Dubbo基础编二_使用Maven构建Dubbo服务可执行jar包
- 菜鸟的DUBBO进击之路(六):使用maven构建dubbo服务的可执行jar包
- 使用Maven构建dubbo服务可执行的jar包--待完善
- Dubbo之使用Maven构建服务的可执行jar包
- 使用maven构建Dubbo服务的可执行的jar包
- 跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
- 学习dubbo(五):使用maven构建dubbo服务的可执行的jar
- Dubbo-使用Maven构建Dubbo服务的可执行jar包
- Dubbo基础篇_04_使用Maven构建Dubbo服务可执行jar包
- [置顶] dubbo-3 使用maven构建dubbo可执行jar包
- 使用Maven构建Dubbo服务的可运行jar包 支持优雅关机
- 使用Maven构建dubbo服务可执行的jar包
- maven构建dubbo服务的可执行jar包
- 使用maven构建dubbo服务的可执行jar包
- 基于maven构建dubbo服务的可执行jar包