****二、分布式工程的模块搭建****
1 搭建订单的Web模块工程


只勾web模块就可以了

需要开发的类
| | | |
| --- | --- | --- |
| 包 | 类 | 说明 |
| controller | OrderController | web controller |
由于需要让订单的web应用可以调用用户的Service接口,那么必须在订单的工程中也要包含一份Service接口。
如果拷贝一个接口到订单工程中,那么如果以后有更多的模块都调用这个接口呢?每个都拷贝一份接口类么?
这种情况我们就可以利用maven的依赖把这些接口作为公共的包管理起来。
同时接口类种的方法也引用了很多的实体bean, 那么同样的实体bean的类我们也统一管理起来。
这样我们就有了如下的依赖关系:

2 创建bean模块

同时我们把UserManage中的bean剪切到bean模块中



bean模块报错是因为其中引用了通用mapper,所以我们把通用mapper的依赖提取出来放到bean模块后面,变成如下结构。

bean模块的pom.xml
<project xmlns="maven.apache.org/POM/4.0.0"x…
4.0.0
com.atguigu.gmall
gmall-bean
1.0-SNAPSHOT
gmall-parent
com.atguigu.gmall
1.0-SNAPSHOT
tk.mybatis
mapper-spring-boot-starter
1.2.3
org.springframework.boot
spring-boot-starter-jdbc
由于依赖包分布于多个模块中,最好有一个地方能够把所有依赖的版本通用管理起来。
这就用到了maven的<parent>概念。可以让所有的模块都继承这个parent模块,由这个parent模块来管理版本。
3 搭建parent模块


parent模块的 pom.xml
4.0.0com.atguigu.gmallgmall-parent1.0-SNAPSHOTpomUTF-8UTF-81.81.2.461.0.102.6.00.101.3.11.9.201.4.011.9.11.11.24.5.53.71.2.32.9.05.3.34.5.11.9.3org.springframework.bootspring-boot-starter-parent1.5.10.RELEASE com.alibabafastjson${fastjson.version}com.alibabadubbo${dubbo.version}com.101teczkclient${zkclient.version}com.gitee.regerspring-boot-starter-dubbo${dubbo-starter.version}org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis.version}net.sourceforge.nekohtmlnekohtml${nekohtml.version}xml-apisxml-apis${xml-apis.version}org.apache.xmlgraphicsbatik-ext${batik-ext.version}org.jsoupjsoup${jsoup.version}org.apache.httpcomponentshttpclient${httpclient.version}org.apache.commonscommons-lang3${commons-lang3.version}tk.mybatismapper-spring-boot-starter${mapper-starter.version}redis.clientsjedis${jedis.version}io.searchboxjest${jest.version}net.java.dev.jnajna${jna.version}commons-beanutilscommons-beanutils${beanUtils.version}
然后在idea右边菜单执行安装

那么除了通用mapper以外其他的第三方依赖我们如何放置
4 搭建 util模块
首先我们可以把所有的第三方依赖包分为四种
| | | | | |
| --- | --- | --- | --- | --- |
| web业务模块用到的第三方包,比如文件上传客户端、页面渲染工具、操作cookie的工具类等等。 | service业务模块用到的第三方包,比如jdbc、mybatis、jedis、activemq工具包等等。 | 通用型的第三方包,比如fastjson、httpclient、apache工具包等等。 | 只有本模块用到的 es | |
基于这四种情况我们可以搭建如下的依赖结构:

创建common-util的模块


创建gmall-web-util和gmall-service-util
创建service-util模块


创建web-util模块


pom.xml文件
首先先分析具体哪些包是通用的
gmall-common-util
| | | |
| --- | --- | --- |
| spring-boot-starter-test | 测试(springboot有默认版本号) | |
| spring-boot-starter-web | 内含tomcat容器、HttpSevrletRequest等 | (springboot有默认版本号) |
| fastjson | json工具 | |
| commons-lang3 | 方便好用的apache工具库 | |
| commons-beanutils | 方便好用的apache处理实体bean工具库 | |
| commons-codec | 方便好用的apache解码工具库 | |
| httpclient | restful调用客户端 | |
gmall-web-util
| | |
| --- | --- |
| thymeleaf | springboot自带页面渲染工具(springboot有默认版本号) |
gmall-service-util
| | |
| --- | --- |
| spring-boot-starter-jdbc | 数据库驱动(springboot有默认版本号) |
| mysql-connector-java | 数据库连接器(springboot有默认版本号) |
| mybatis-spring-boot-starter | mybatis |
gmall-common-util的pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-common-util</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> </dependencies> </project> |
gmall-web-util的pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>gmall-parent</artifactId> <groupId>com.atguigu.gmall</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>gmall-web-util</artifactId> <groupId>com.atguigu.gmall</groupId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-common-util</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies> </project> |
gmall-service-util的pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>gmall-parent</artifactId> <groupId>com.atguigu.gmall</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>gmall-service-util</artifactId> <dependencies> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-common-util</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> </dependencies> </project> |
创建interface模块

5 搭建interface模块

把UserManageService接口移动到该模块下

interface的pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-interface</artifactId> <version>1.0-SNAPSHOT</version> <modelVersion>4.0.0</modelVersion> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-bean</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project> |
最终的结构图

编辑搜图
请点击输入图片描述(最多18字)
6 gmall-User-manage模块
pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-user-manage</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>gmall-user-manage</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-service-util</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
其他的类,要重新引一下包
| | | | | | | |
| --- | --- | --- | --- | --- | --- | --- |
| 1 同时要修改bean的引入 | 2 同时要修改@Service和@Autowrited注解 | 3 将接口和bean转移到bean和interface项目中 | 4 原来user-manage中的mapper,service接口,和实现类中的引用bean类的位置需要修改 | import com.atguigu.gmall.usermanage.bean.UserInfo; | import com.atguigu.gmall.bean.UserInfo; | 5 重新安装maven |
7 继续开发gmall-order-web模块
order-web的pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-order-web</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>gmall-order-web</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.atguigu.gmall</groupId> <artifactId>gmall-web-util</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
修改gmall-usermanage pom.xml
| |
| --- |
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu.gmall1108</groupId> <artifactId>gmall-usermanage</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>gmall-usermanage</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.atguigu.gmall1108</groupId> <artifactId>gmall-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>com.atguigu.gmall1108</groupId> <artifactId>gmall-interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.atguigu.gmall1108</groupId> <artifactId>gmall-service-util</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
OrderController
| |
| --- |
| @Controller**public class**OrderController { UserManageService **userManageService**; @ResponseBody @RequestMapping(value = **"****initOrder****"**) **public**String initOrder(HttpServletRequest request){ String userId = request.getParameter(**"****userId****"**); List<UserAddress> userAddressList = **userManageService**.getUserAddressList(userId); String jsonString = JSON.toJSONString(userAddressList); **return**jsonString; } } |
这样虽然引入的包,可以认出UserManageService,但是这个接口没有被注入。原来利用Spring可以注入,但是现在实现类不在同一个模块如何注入?
**三、Dubbo和zookeeper**

那dubbo和zookeeper如何引入?
dubbo其实是一组jar包,通过maven引入就可以。
zookeeper是一个开源的服务软件,需要安装到linux中。
1、安装zookeeper
1.1安装环境:
linux版本: CentOS 6.8
zookeeper版本 zookeeper-3.4.11.tar.gz
拷贝zookeeper-3.4.11.tar.gz到/opt下,并解压缩

改名叫zookeeper

1.2制作开机启动的脚本

把如下脚本复制进去
#!/bin/bash#chkconfig:2345 20 90#description:zookeeper#processname:zookeeperZK_PATH=/opt/zookeeperexport JAVA_HOME=/opt/jdk1.8.0_152case ZK_PATH/bin/zkServer.sh start;; stop) sh ZK_PATH/bin/zkServer.sh status;; restart) sh $ZK_PATH/bin/zkServer.sh restart;; *) echo "require start|stop|status|restart" ;;esac

然后把脚本注册为Service

增加权限

1.3初始化zookeeper配置文件
拷贝/opt/zookeeper/conf/zoo\_sample.cfg
到同一个目录下改个名字叫zoo.cfg

然后咱们启动zookeeper

以上状态即为安装成功。
2 dubbo的使用
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
2.1安装监控软件:
材料: tomcat8 + dubbo-admin
拷贝tomcat8和dubbo-admin到/opt目录下

然后把dubbo-admin-2.6.0.war拷贝到tomcat的webapps目录下

2.2设置开机启动tomcat
[root@localhost tomcat4dubbo]# vim /etc/init.d/dubbo-admin
复制如下脚本
#!/bin/bash#chkconfig:2345 21 90#description:dubbo-admin#processname:dubbo-adminCATALANA_HOME=/opt/tomcat4dubboexport JAVA_HOME=/opt/jdk1.8.0_152case CATALANA_HOME/bin/startup.sh ;;
stop)echo "Stopping Tomcat..."$CATALANA_HOME/bin/shutdown.sh ;;
restart)echo "Stopping Tomcat..."CATALANA_HOME/bin/startup.sh ;; *)echo "Usage: tomcat {start|stop|restart}";; esac
然后同样的注册进入到服务中
[root@localhost tomcat4dubbo]# chkconfig --add dubbo-admin
加入权限
[root@localhost tomcat4dubbo]# chmod +x dubbo-admin
如果想改变端口号去tomcat中的server.conf中修改,课件中已改为7080,然后就可以启动服务了。
2.3 启动服务
[root@localhost tomcat4dubbo]# service dubbo-admin start
启动后用浏览器访问

可以看到要提示用户名密码,默认是root/root
(修改的话,可以去)

打开这个界面就说明,dubbo的监控服务已经启动。但是现在咱们还没有搭建dubbo的提供端和消费端。
3 开发功能
3.1 引入dubbo的依赖
spring-boot-starter-dubbo
dubbo
zkclient
这个依赖首先要放到gmall-parent工程中,用来定义要引入的三个包是什么版本。
<project xmlns="maven.apache.org/POM/4.0.0"x…
4.0.0
com.atguigu.gmall
gmall-parent
1.0-SNAPSHOT
pom
<fastjson.version>1.2.46</fastjson.version>
<mapper.version>3.4.6</mapper.version>
<dubbo-starter.version>1.0.10</dubbo-starter.version>
<dubbo.version>2.6.0</dubbo.version>
<zkclient.version>0.10</zkclient.version>
com.alibaba
fastjson
{mapper.version}
然后加入到gmall-common-util模块中
com.alibaba
dubbo
com.101tec
zkclient
org.slf4j
slf4j-log4j12
com.gitee.reger
spring-boot-starter-dubbo
3.2 如何使用:这样在所有的业务模块中都可以使用dubbo了。
dubbo的使用分为**提供端**和**消费端**。使用起来非常方便只要记住两个注解@Reference和@Service,加上application.properties的一段配置就可以了。
3.3 提供端
顾名思义就是提供服务供别人调用的,相当于spring中的Service的实现类。
使用也很简单,就是一个注解加一份配置
提供端在实现类上增加注解 @Service,和spring的是一样的但是引的包是不一样的。如下



**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://gitee.com/vip204888)**