分布式架构在商城项目中的应用_分布式架构商城项目,四面楚歌的大数据开发工程师该何去何从

59 阅读9分钟

****二、分布式工程的模块搭建****


1 搭建订单的Web模块工程


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7acbfb4796ac42c89a1d31a9f626ec04~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=xbkNMAvyDEBahWa5w5F2FndN8VE%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fc3d5e1f99b84ddd96217f774f086e8f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=etpqHlF2PaYaVBW00Ufy4hEevNo%3D)



只勾web模块就可以了


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fb6cf77039514ec7998508879d220757~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=UQzYVUtFzWtW0dL69wCh%2B7ENYXQ%3D)



需要开发的类




|  |  |  |
| --- | --- | --- |
| 包 | 类 | 说明 |
| controller | OrderController | web controller |


由于需要让订单的web应用可以调用用户的Service接口,那么必须在订单的工程中也要包含一份Service接口。


如果拷贝一个接口到订单工程中,那么如果以后有更多的模块都调用这个接口呢?每个都拷贝一份接口类么?


这种情况我们就可以利用maven的依赖把这些接口作为公共的包管理起来。


同时接口类种的方法也引用了很多的实体bean, 那么同样的实体bean的类我们也统一管理起来。


这样我们就有了如下的依赖关系:


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a8261581945249879f1dd732875d9898~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=%2BgR%2BTsT2fa2IVGN3xizdxlOwHJU%3D)



2 创建bean模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/505e53343ecb402a9af9d0646409475c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=RM85ftpZAGmJxUCkxkajjYig4XM%3D)



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


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d72bde44534740398590e2b1d53f7b2c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=dLqAm1SMOporcBp58ShnO3ZOh5Q%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/51a429bcc8174f46ac5cb4e86de0c7a6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=SiR553lKhpGU7AOmY24Cn9VoqqQ%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a93de9eb56c34f87be452721c7eb4a0a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=GdSqXZAXMB9uggZ630nUfGWRKaA%3D)


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


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/10795ebcf5984124a794bc1f68ad6533~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=PGB54JU6jDH%2F4tRmwknc6Kl4%2BVQ%3D)


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模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/dd6c29c4542145bfa7d2d670ac423db7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=MAExTJZQG4OhOuqr2Cwyz%2FaiusA%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/08413ce7430c4783b598f4f087b3a42f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=VGtXM71L3iiW7dmdKT4Z2IsBCk0%3D)



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右边菜单执行安装


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2e5a2ddd4e2c44529064b2a48c4e7d50~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=kQRxTwsUmY26uAUvJBNYs%2BYyhac%3D)



那么除了通用mapper以外其他的第三方依赖我们如何放置


4 搭建 util模块


首先我们可以把所有的第三方依赖包分为四种




|  |  |  |  |  |
| --- | --- | --- | --- | --- |
| web业务模块用到的第三方包,比如文件上传客户端、页面渲染工具、操作cookie的工具类等等。 | service业务模块用到的第三方包,比如jdbc、mybatis、jedis、activemq工具包等等。 | 通用型的第三方包,比如fastjson、httpclient、apache工具包等等。 | 只有本模块用到的 es |  |


基于这四种情况我们可以搭建如下的依赖结构:


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0d58dea996c7497eb294063f75c71bcf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=wI%2BsAjLFkrYPW0oLFRHg1Xl3vco%3D)



创建common-util的模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5ceeacf70f0440dcb57f41d12c5810ce~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=UoNhfmCi9NfZDaJCizFlW5pyfEc%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/06f8de2cab5b40d491922b4a6e8852e8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=bBPDg%2FUWA9kwRAmDaBY8IdXpD0g%3D)


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


创建service-util模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/90adc8ced8304113a40a8030bc7bd5a0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=WK%2BzV03N31ujHmXuC9ywDR6NPlo%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f3141bc31cbc4758b2f749b44f78b25d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=qXun%2FxNnhPSXMm17g%2FB649OWJls%3D)


创建web-util模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/90adc8ced8304113a40a8030bc7bd5a0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=WK%2BzV03N31ujHmXuC9ywDR6NPlo%3D)



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7bece404bba444c9b01930dc345dbf04~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=SCt%2FqplQihy%2F2D8KfDQsWuZbJrw%3D)


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模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8d2dbae5fe4448e299512fe014fe2d84~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=c8ucOB%2B9K3FOyGqSSS3nkS8rwdo%3D)


5 搭建interface模块


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7380a97e76d3452dab3ff9eda8cc1f11~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=GilnB8nCEmt7EhCrh3w2zY5GTDQ%3D)


把UserManageService接口移动到该模块下


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0b8ee45a012b4ea8a4514975fe1791f5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=jc9mjF4i9%2FJygkDSY8IJylqmuPM%3D)


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> |


最终的结构图


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8a2b2bc3b15547a3aabc43ec268d9e3d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=V5Vya9bwiwGzE1t0ToimwhbQUZk%3D)


编辑搜图


请点击输入图片描述(最多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**


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/df6f2522a4c045849221d0bfa86d1145~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=BUVUzG9sv6CTvQ4ffRDCQ0RlSKM%3D)


那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下,并解压缩


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/807f6f5fc24e47319c7da55f95ab40a3~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=ROw7TzXitWewAQrp%2Bqk7%2BzdlYmc%3D)


改名叫zookeeper


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/dc9e5d88859144d6a6079fd2a8d08cc5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=nxi7O0Nr2TX%2BrycZ7QwlfKJ5IBE%3D)


1.2制作开机启动的脚本


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c6f34048c07146a6acc11d74262f6aaf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=5DbDrG%2FVVa032NXFHaArkKpq0X4%3D)


把如下脚本复制进去



#!/bin/bash#chkconfig:2345 20 90#description:zookeeper#processname:zookeeperZK_PATH=/opt/zookeeperexport JAVA_HOME=/opt/jdk1.8.0_152case 1instart)sh1 instart) sh ZK_PATH/bin/zkServer.sh start;; stop) sh ZKPATH/bin/zkServer.shstop;;status)shZK_PATH/bin/zkServer.sh stop;; status) sh ZK_PATH/bin/zkServer.sh status;; restart) sh $ZK_PATH/bin/zkServer.sh restart;; *) echo "require start|stop|status|restart" ;;esac



![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9fc56808e2544ce1a273416d9a3b0430~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=Bzeq1cX325hAP7ESj6%2BCKBVmZKc%3D)


然后把脚本注册为Service


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/36b75f677d12429da96c83e07c611391~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=Ufg2why3Hkuwx9buklu%2F4RAZJbw%3D)


增加权限


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ec4d6cca13a64cde9341021c1f0624a3~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=9QsNekUh1NR9C4RuEZBx31FYOm4%3D)


1.3初始化zookeeper配置文件


拷贝/opt/zookeeper/conf/zoo\_sample.cfg


到同一个目录下改个名字叫zoo.cfg


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ccc12296852c48dea60bd92ff6f40b6b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=6dhauI%2BDOZ7nv0MRz0HDMXK0UEE%3D)


然后咱们启动zookeeper


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b640adfe99144eb7935f95b31cc0f7b7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=OneTchUr6%2Bmr0IgaUyjHd76L4KA%3D)


以上状态即为安装成功。


2  dubbo的使用


dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。


但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。


2.1安装监控软件:


材料: tomcat8 +  dubbo-admin


拷贝tomcat8和dubbo-admin到/opt目录下


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8d6adbe4172d44bb8c3230e629040619~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=61ua3KOId2jjPEJ3TBefd6ky5LI%3D)


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


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/da2f276b1676401eaf299095fb4d042c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=PTt3H7MuvW7Hp2uxnMvtmjP1dPk%3D)


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 1instart)echo"StartingTomcat..."1 instart)echo "Starting Tomcat..."CATALANA_HOME/bin/startup.sh ;;

stop)echo "Stopping Tomcat..."$CATALANA_HOME/bin/shutdown.sh ;;

restart)echo "Stopping Tomcat..."CATALANAHOME/bin/shutdown.shsleep2echoecho"StartingTomcat..."CATALANA_HOME/bin/shutdown.sh sleep 2echoecho "Starting 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


启动后用浏览器访问


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b91e688f3b594a818dddaaa8cf199c36~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=4xfomyxD7LLpICyA3eEVnn68BeI%3D)


可以看到要提示用户名密码,默认是root/root


(修改的话,可以去)


![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bc6f88b7f37846aca2835d18e63b966e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=gORednLYdRlkjKVL%2FsE4yw2QZVo%3D)


打开这个界面就说明,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 fastjson.version</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>{fastjson.version}</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>{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的是一样的但是引的包是不一样的。如下




![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/084d1f74d1874f9eaa46a99c98509fb8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=ymWz1kmR%2BGDyjjbr%2BXrBatugO%2Fs%3D)
![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d33e648d86de41e298de229dfe5a5565~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=pT7maHadvAMEOFKXVDnEVVOIo0A%3D)
![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/720c38ca4dbf45fba6de948b1b8efbae~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867569&x-signature=%2Bk6ifQGbhGFW%2FePNal5d%2F74aQhc%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**


**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://gitee.com/vip204888)**