在使用dubbo开发分布式项目时,一般都遵循如下架构
最近在写的分布电商项目中
我使用了zookeeper作注册中心,provider作数据访问服务层
consumer就是一般开发的web项目,我按照功能分了几个子项目,只不过它进行数据访问
时,是通过注册中心也就是zookeeper获取到provider提供的服务,monitor是数据统计的一个服务,我项目中没用使用到。
以上是dubbo的大致架构,也是我项目的划分依据。
其中consumer依赖了注册接口就可以当普通项目直接部署
注册中心zookeeper占用单独的进程、端口号
而provider也是项目中独立的,重要的一块,下面讲讲如将provider何打包成一个独立的,可运行的jar包部署到linux上
打包provider模块
这是我的项目结构:其中dubbo-service-impl就是我们要打包的provider
,我们用assmebly将它打包
1.由于Impl需要依赖service项目中的相关jar,所以打包前先将依赖的dubbo-service项目安装
右键项目>run as >mavan install
2.在impl项目的pom文件加入assembly插件
<build>
<plugins>
<!-- 指定项目的打包插件信息 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- 指定打包描述文件的位置:相对项目根目录的路径 -->
<!-- assembly打包的描述文件 -->
<descriptor>assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.在项目下创建文件夹assmebly,并在assmebly下创建文件assmebly.xml
4.assmebly.xml内容:
<?xml version='1.0' encoding='UTF-8'?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!-- 该字符会添加到最终tar.gz包的名称后面,作为后缀 -->
<id>assembly</id>
<!-- 指定打包的格式为tar.gz,该类型压缩包在linux中比较常见 -->
<formats>
<format>tar.gz</format>
</formats>
<!-- 在tar.gz压缩包中是否包含根文件夹,该根文件夹名称和tar.gz去掉id后缀一致 -->
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<!-- 将项目根路径下assembly/bin路径中的内容打包到压缩包中的根目录下的bin目录中 -->
<fileSet>
<!-- 相对项目根路径的相对路径 -->
<directory>assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<!-- 设置最终tar.gz中该文件夹下的权限,跟linux权限写法一致 -->
<fileMode>0755</fileMode>
</fileSet>
<!-- 将项目根路径下assembly/conf路径中的内容打包到压缩包中的根目录下的conf目录中 -->
<fileSet>
<directory>assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<!-- 设置其linux权限 -->
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<!-- 将所有依赖的jar包打包到压缩包中的根目录下的lib目录中 -->
<!-- 此lib目录中包含自己开发的项目jar包以及demo_service.jar,还有第三方的jar包 -->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
5.在assembly下创建bin和conf文件夹,里面还需要几个文件,把这几个文件复制进去,这里是是打包好的assembly
链接:https://pan.baidu.com/s/18kbdHp0KUl9emGXXIknRGg
提取码:fxk2
6.run as maven install 在target下生成压缩文件
解压tar.gz结尾的文件
发现里面有个bin目录,windows下启动start.bat,linux中启动start.sh,即可启动这个provider