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秒:(超时则强制关闭)
< 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. 项目核心代码结构截图 ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/b3dd0f0709f9a50e93c0ec0e9407eb50.png) 项目模块依赖 ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/7af62f2d00631fc46dc11e22f81ecbef.png) 特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化 2. 项目依赖介绍 2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图: ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/d2d0f9bc8b052af4b302388f1ea09836.png)
2.2 Dubbo独立服务项目依赖如下图: ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/3c3fb32cf552909fbd7dd4f58977c7e5.png)
3. 项目功能部分截图: ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/0c04997ca5c21fbb6d6bbfef5a8a05a1.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/1026ac88273dd305427dae60dbed814b.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/f18d90a48fd0cbfa648b0f0f827fbf2a.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/695584749de25c2948fc735231614daf.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/1bb94fb43653b53997ca2367a7a5d6b1.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/a369c0f5dd97767df5bd2c34189758c2.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/a50adf4e13877cbf85d511d8bbadc68f.png) zookeeper、dubbo服务启动 ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/8c4518cba1fdf85fa41b2a3b48e99d45.jpeg) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/ec23f773158a6b37a7f0a6b1848dec36.png) dubbo管控台 ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/042fc6d005986095c005c5bb2605b108.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/2e5c3b0fda177ba1cf658ce93800e563.jpeg) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/cfe76ba56f276019298aff24b5a12736.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/cfe76ba56f276019298aff24b5a12736.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/90bd4ac17917fb5341be3d89aac4687f.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/144d3cb9e34b4d061970a0bc00d136a9.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/7227cb3fb663b70db4cc0fdd01ca7ef8.png) REST服务平台 ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/98cce472dae59c5ebb666a5ecf140151.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/143dcb545ab5b9eddc0539fa67fc12af.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/2a9f436001ef352499d8bfdab9d51baf.png) ![分布式框架介绍 - kafkaee - kafkaee的博客](https://i-blog.csdnimg.cn/blog_migrate/4f5ea37882cea98d43d6785a9216f6e5.png) |