【dubbo】服务运行的三种方式
2017-07-14 16:50
295 查看
dubbo服务的运行方式有三种,分别为:
1. 使用Servlet容器运行(Tomcat、Jetty等)
2. 自建Main方法类来运行(Spring容器)
3. 使用Dubbo框架提供的Main方法类来运行(Spring容器)
下面通过详细介绍与配置,比较一下三种方式。
1. tomcat等web容器
此方式和我们平时在IDE(Eclipse、IDEA等)环境中部署项目一样,将dubbo服务项目直接添加到容器中启动即可,不需要做任何配置。
但此方式其实是不可取的,它增加了复杂性(端口、管理等方面),也浪费资源(内存)。
2. 自建Main方法类运行
此方式是类似自己写了一个测试的方法,该方法通过初始化spring的配置文件,从而启动dubbo服务。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本身提供的高级特性没用上;自己编写启动类可能会有缺陷,所以不建议使用,但可用于本地调试。
3. 使用Dubbo框架提供的Main方法类运行
此方法只需要修改一下项目的pom文件,配置代码如下:
<!--MAVEN打包duboo可执行jar begin --> <build> <finalName>edu-service-user</finalName> <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> <pluginManagement> <plugins> <!-- 解决Maven插件在Eclipse内执行了一系列的生命周期引起冲突 --> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <goals> <goal>copy-dependencies</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> <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> <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 --> <useUniqueVersions>false</useUniqueVersions> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <type>jar</type> <includeTypes>jar</includeTypes> <useUniqueVersions>false</useUniqueVersions> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> <!--MAVEN打包duboo可执行jar end -->
配置好以后,只需要在IDE中执行一下Maven install命令,便会打出一个jar包,在启动服务的时候,直接使用java -jar命令执行jar包即可。
此方式是建议使用的方式,其优势在于是
1. 由框架本身提供(com.alibaba.dubbo.container.Main);
2. 可实现优雅关机(ShutdownHook)
本博客介绍的内容属于dubbo中服务容器的要点,关于服务容器的介绍,官方文档简单总结了如下几点:
1. 服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等web容器的功能,如果硬要用web容器去加载服务提供方,增加复杂性,也浪费资源。
2. 服务容器只是一个简单的Main方法,并加载一个简单的spring容器,用于暴露服务。
3. 服务容器的加载内容可以扩展,内置了spring、jetty、log4j等加载,可通过Container扩展点进行扩展。
从以上介绍,我们也很容易得出,上面介绍的三种方式,该如何进行选择。
相关文章推荐
- Dubbo之服务运行的三种方式-yellowcong
- 【dubbo】dubbo服务注册三种方式
- Dubbo服务的运行方式(使用maven构建dubbo可执行的jar包)
- 【dubbo】服务提供者运行的三种方式
- 解决dubbo注册zookepper服务IP乱入问题的三种方式
- Dubbo分布式服务治理(二)——Dubbo服务运行方式&&监控中心安装(Linux)
- 解决dubbo注册zookepper服务IP乱入问题的三种方式
- 解决dubbo注册zookepper服务IP乱入问题的三种方式
- dubbo服务的运行方式(2)
- dubbo服务的三种启动方式
- dubbo服务的运行方式
- PHP三种运行方式mod_php5/cgi/fast-cgi
- dubbo -jar 方式运行并修改端口
- 后台长期运行进程的三种方式
- SpringBoot启动服务的三种方式
- linux让进程以后台服务的方式运行
- Linux中设置服务自启动的三种方式
- [转]Linux中设置服务自启动的三种方式
- Hive 三种运行方式之 本地 derby
- 退出app的方式以及在有服务运行的前提下退出app