尚好房 04_服务拆分

article/2025/10/29 15:31:20

尚好房:服务拆分

一、业务介绍

1、项目模块划分

根据前面的介绍,目前我们的系统规划了3个dubbo服务提供者模块:权限服务、房源服务与会员服务,及2个服务消费者模块:尚好房管理平台(web-admin)与网站前端(web-front)

2、服务调用关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKmBjFpK-1661870386677)(images/01/img_001.png)]

3、项目拆分说明

当前我们项目为单体的SSM项目,目前开发了权限管理的用户管理与角色管理,接着要开发房源管理的数据字典、小区管理与房源管理,权限管理与房源管理属于两不同的dubbo服务,当前我们就来把单体架构拆分为dubbo通信的分布式架构,拆分步骤:

1、shf-parent模块管理dubbo相关的依赖

2、common-util模块引入依赖

3、提取api接口模块:service-api

4、分解web-admin模块:

​ web-admin作为服务消费者,只负责dubbo消费端

​ service及dao层作为服务提供者,通过dubbo发布服务

二、服务拆分

1、shf-parent模块添加dubbo依赖管理

在shf-parent模块pom.xml新增依赖(第一天搭建环境的时候已经添加,不用重复添加)

  1. 版本锁定

    <dubbo.version>2.6.0</dubbo.version>
    <zookeeper.version>3.4.7</zookeeper.version>
    <junit.version>4.12</junit.version>
    <zkclient.version>0.1</zkclient.version>
    
  2. 管理依赖

    <!-- dubbo相关 -->
    <dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version>
    </dependency>
    <dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>${zookeeper.version}</version>
    </dependency>
    <dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>${zkclient.version}</version>
    </dependency>
    <dependency><groupId>javassist</groupId><artifactId>javassist</artifactId><version>3.12.1.GA</version>
    </dependency>
    <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version>
    </dependency>
    

2、common-util模块引入依赖

在common-util模块pom.xml引入依赖(第一天搭建环境的时候已经添加,不用重复添加)

<!-- dubbo相关 -->
<dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId>
</dependency>
<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId>
</dependency>
<dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId>
</dependency>
<dependency><groupId>javassist</groupId><artifactId>javassist</artifactId>
</dependency>
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId>
</dependency>

3、搭建service-api模块

用于存放所有业务层接口

3.1 创建工程

shf-parent工程中创建子工程service-api

3.2 引入依赖

<?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>shf-parent</artifactId><groupId>com.atguigu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>service-api</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.atguigu</groupId><artifactId>common-util</artifactId><version>1.0</version></dependency><dependency><groupId>com.atguigu</groupId><artifactId>model</artifactId><version>1.0</version></dependency></dependencies>
</project>

3.3 复制service接口

复制AdminServiceRoleServiceservice-api模块的com.atguigu.service包中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRKjU1Hp-1661870386682)(images/04/img_002.png)]

4、搭建服务提供者模块

4.1 搭建service父工程

  1. shf-parent工程中搭建子工程命名为service,这个工程作为所有服务提供者的父工程

  2. 删除service工程的src目录

  3. 修改service工程的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>shf-parent</artifactId><groupId>com.atguigu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>service</artifactId><packaging>pom</packaging><dependencies><dependency><groupId>com.atguigu</groupId><artifactId>service-api</artifactId><version>1.0</version></dependency></dependencies>
    </project>
    

4.2 搭建service-acl工程

4.2.1 创建工程

service工程中创建子工程service-acl子工程,并且使用插件将其转成javaweb项目

4.2.2 修改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>service</artifactId><groupId>com.atguigu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>service-acl</artifactId><packaging>war</packaging><build><plugins><plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.4.15.v20190215</version><configuration><!-- 如果检测到项目有更改则自动热部署,每隔n秒扫描一次。默认为0,即不扫描--><scanIntervalSeconds>2</scanIntervalSeconds><webAppConfig><!--指定web项目的根路径,默认为/ --><contextPath>/</contextPath></webAppConfig><httpConnector><!--端口号,默认 8080--><port>7001</port></httpConnector></configuration></plugin></plugins></build>
</project>
4.2.3 拷贝代码

拷贝web-admin工程中的业务层和持久层内容

  1. 创建相同的业务层和持久层包结构

  2. 拷贝AdminServiceImplRoleServiceImpl实现类到com.atguigu.service.impl

  3. 替换业务层实现类上的@Service注解为Dubbo的Service注解

    @Service(interfaceClass = AdminService.class)
    @Transactional(propagation = Propagation.REQUIRED)
    public class AdminServiceImpl extends BaseServiceImpl<Admin> implements AdminService {
    
    @Service(interfaceClass = RoleService.class)
    @Transactional(propagation = Propagation.REQUIRED)
    public class RoleServiceImpl extends BaseServiceImpl<Role> implements RoleService{
    
  4. 拷贝持久层接口AdminMapperRoleMappercom.atguigu.mapper包中

  5. 拷贝mappers目录到resources目录中

  6. 拷贝日志配置文件和jdbc.properties文件到resources目录中

  7. 拷贝spring-persist.xmlspring-service.xmlresources/spring目录中

  8. 修改spring-service.xml配置文件

    ① 删除包扫描配置,因为包扫描应该有dubbo完成,进行服务发布

    ② 修改事务注解驱动配置

    <!--开启事务控制的注解支持注意:此处必须加入proxy-target-class="true",需要进行事务控制,会由Spring框架产生代理对象,Dubbo需要将Service发布为服务,要求必须使用cglib创建代理对象。
    -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
    
  9. 添加发布dubbo服务的配置文件:spring/spring-registry.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--指定应用名称--><dubbo:application name="service-acl"/><!--配置协议名和端口,如果不配置的话,端口默认为20880--><dubbo:protocol name="dubbo" port="20881"/><!--配置注册中心地址--><dubbo:registry address="zookeeper://localhost:2181" /><!--包扫描发布服务--><dubbo:annotation package="com.atguigu"/>
    </beans>
    
  10. 修改web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><!--配置ContextLoaderListener--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
    </web-app>
    

    注意: spring-service.xml文件中可以不使用import标签导入spring-persist.xml

5、搭建服务消费者模块

5.1 搭建web父工程

  1. shf-parent工程中搭建子工程命名为web,这个工程作为所有服务消费者的父工程

  2. 删除web工程的src目录

  3. 修改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"><parent><artifactId>shf-parent</artifactId><groupId>com.atguigu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>web</artifactId><packaging>pom</packaging><dependencies><dependency><groupId>com.atguigu</groupId><artifactId>service-api</artifactId><version>1.0</version></dependency></dependencies>
    </project>
    

5.2 搭建web-admin工程

5.2.1 移动模块

① 将web-admin移动到web模块中

② 删除shf-parent模块pom.xml文件的<module>web-admin</module>标签,该模块已移动到web模块

③ 在web模块的pom.xml中新增

<modules><module>web-admin</module>
</modules>
5.2.2 修改web-admin工程的pom.xml

修改了父模块为web,删除了依赖(父模块已引入依赖)

<?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>web</artifactId><groupId>com.atguigu</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>web-admin</artifactId><packaging>war</packaging><build><plugins><plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.4.15.v20190215</version><configuration><scanIntervalSeconds>2</scanIntervalSeconds><webAppConfig><!--指定web项目的根路径,默认为/ --><contextPath>/</contextPath></webAppConfig><httpConnector><!--端口号,默认 8080--><port>8000</port></httpConnector></configuration></plugin></plugins></build>
</project>
5.2.3 删除service与dao层

① 删除com.atguigu.service包和com.atguigu.mapper

② 删除resources/mappers目录

③ 删除resources/spring/spring-service.xmlresources/spring/spring-persist.xml文件

5.2.4 新增dubbo配置文件

创建resources/spring/spring-registry.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--配置应用名--><dubbo:application name="web-admin"/><!--配置注册中心地址--><dubbo:registry address="zookeeper://localhost:2181"/><!--配置dubbo包扫描--><dubbo:annotation package="com.atguigu"/><!--启动时候不检查 设置连接超时时间--><dubbo:consumer check="false" timeout="600000"></dubbo:consumer>
</beans>
5.2.5 修改web.xml

删除ContextLoadListenercomtext-param配置,并且将加载的配置文件路径改成classpath:spring/spring-*.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--配置解决乱码的过滤器--><!-- 配置过滤器解决 POST 请求的字符乱码问题 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!-- encoding参数指定要使用的字符集名称 --><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><!-- 请求强制编码 --><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param><!-- 响应强制编码 --><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>
5.2.6 改造表现层

将表现层注入服务对象的@Autowired注解改成@Reference注解

@Reference
private AdminService adminService;
@Reference
private RoleService roleService;

6、测试

① 在shf-parent项目中执行install

② 启动zookeeper

③ 使用jetty插件启动service-aclweb-admin模块

④ 访问:http://localhost:8000/


http://chatgpt.dhexx.cn/article/mF3XSUXd.shtml

相关文章

纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展

10月28日&#xff0c;锦江酒店(中国区)“齐鲁集锦 共话未来”投资人交流会在济南盛大召开&#xff0c;面向华东地区投资人&#xff0c;行业专家、商旅客、品牌代表齐聚一堂&#xff0c;共同聚焦酒店市场投资新价值&#xff0c;商讨新时代酒店行业新机遇&#xff0c;多维探索酒店…

2023尚上优选-社区团购 优选电商Spring Cloud Alibaba

尚上优选2023最新企业级微服务架构项目 分布式微服务后端VUE、小程序 尚上优选是真实居住社区内居民团体的一种互联网线上线下购物消费行为&#xff0c;是依托真实社区的一种区域化、小众化、本地化、网络化的团购形式。简而言之&#xff0c;它是依托社区和团长社交关系实现生…

尚品汇项目搭建

文章目录 一些问题大体流程一、基础配置路由7&#xff09;路由的跳转8&#xff09;路由传参9)重写replace|和push方法10&#xff09;router和route axios引入进度条vuex三级联动防抖节流 Home组件轮播图mock共用组件Carousel 二.search页面内查看接口格式发送请求获取数据面包屑…

BBS论坛

BBS论坛的搭建 第一步:下载 Discuz_X3.2_SC_UTF8.zip 压缩包到/var/www/westos.com/bbs/html下。 mkdir /var/www/westos.com/bbs/html -p 第二步&#xff1a;解压的到 readme upload utility 三个文件夹&#xff0c;删除压缩包 第三步&#xff1a;编辑/etc/httpd/conf.d中的…

尚好房 07_前端房源展示

尚好房&#xff1a;前端房源展示 一、分页显示房源列表 1、效果 2、项目搭建 2.1 创建项目 在web项目中创建子工程web-front 2.2 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&…

高地创新“至臻和鸣”体系甄选客户答谢会暨公益论坛隆重举行

2022年1月5日,高地创新服务产业集团“至臻和鸣”体系甄选客户答谢会暨物业服务智造幸福生活公益论坛于上海豫园“海上梨园”召开。复星蜂巢合伙人、高地城市服务产业集团董事长冉飞,复星蜂巢副总裁、高地城市服务产业集团执行总裁陈煜宇,复星副首席赋能官、公共事务与企业传…

关于万物悦享推广案例

关于万物悦享推广案例 项目介绍 万物悦享是一家改变传统消费模式的公司&#xff0c;致力于让消费者在衣食住行都能把消费变成开心享受的事情。该公司通过消费增值、绿色积分、12倍通证强制出局、卷轴和撸实现这一目标。在通证经济下&#xff0c;消费者可以通过获得通证再赚回…

盛悦论坛打不开,盛悦论坛挂了,盛悦论坛被黑,请使用这个地址访问即可访问

原文说明&#xff1a;http://www.58zn.cn/html/blogview-1245.html 如果盛悦网站打不开无法访问&#xff0c;请到这里打开盛悦镜像论坛。bbs.58zn.cn这个是盛悦论坛的网站备份镜像&#xff0c;盛悦所有数据保留在这里。 我经常是1个星期做一次数据备份与同步数据。所以&#xf…

Aborted(core dumped)

在用caffe训练的时候发现Aborted(core dumped)错误&#xff0c;搜索后发现可能原因是train_val.prototxt中train部分的batch_size设置过大导致。将batch_size修改调小后即可正常训练。 检查日志后发现确实是内存不够&#xff1a;

net::ERR_ABORTED 404 (Not Found)错误

今天开发Web&#xff0c;在引用静态资源的时候出现了net::ERR_ABORTED 404 (Not Found)这个错误。记录一下。 1、首先介绍一下我的项目的目录结构&#xff1a; 2、然后我原来的的引用js文件的代码是&#xff1a; 因为在eclipse中点击src中的路径可以跳转到对饮的js文件中&…

Python爬虫报错requests.exceptions.ConnectionError: (‘Connection aborted.‘, BadStatusLine(“‘‘“,))

Python爬虫报错requests.exceptions.ConnectionError: (‘Connection aborted.’, BadStatusLine("’’",)) Python爬虫报错requests.exceptions.ConnectionError: (Connection aborted., BadStatusLine("",)) 这个报错的原因一般由于网络状态不好&#x…

『C/C++养成计划』C++项目遇到Aborted (core dumped)的处理方法

C项目遇到Aborted (core dumped)的处理方法 文章目录 一. 关于Core Dump的分析1.1. 什么是Core Dump1.2. 为何有时程序Down了&#xff0c;却没生成 Core文件1.3. 如何使用core文件 二. 具体实例分析2.1. core dump的生成方式2.1.1. 查看生成core文件的开关是否开启&#xff0c…

【排错】net::ERR_ABORTED 404

先说说为什么导不进去,心急的同学可以直接查看解决方法 出现这个问题是springboot在启动的时候没有带上static下的js和css文件一起跑&#xff0c;还有可能出现只带一部分跑&#xff0c;楼主就踩的是第二个雷。 先把项目关闭 一 在springboot自身带有的那个(项目名Applicatio…

C++ abort() has been called错误

程序可以成功编译&#xff0c;说明没有语法问题&#xff0c;应是代码内部的问题&#xff0c;报错如下&#xff1a; abort() has been called&#xff1a;中止被调用&#xff0c;该错误出现有很多原因&#xff0c;查询了多条博客后&#xff0c;发现一卒2018博主已经在博客上总结…

Debug Error: abort() has been called解决办法

今天调试程序的时侯&#xff0c;本来没有问题。后来调试了几次突然跳出“Debug Error: abort() has been called”&#xff08;下图&#xff09; 经过整理和网上查阅资料发现是读取数据的问题。有时是文件路径的双斜杠。我的代码中有一段是读入“test1.tif”&#xff0c;后面还…

Error:Could not load file“*.AXF” Debugger aborted!

Error&#xff1a;Could not load file“*.AXF” Debugger aborted&#xff01; 在这里我的错误原因是&#xff1a;虽然建立项目&#xff0c;添加源文件&#xff0c;但是没有编译当前文件生成。误认为start /debug 就是dev里面的编译执行按钮 解决方案&#xff1a;在project框…

已解决requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetError(10054,“远程主机强迫关

已解决&#xff08;Python爬虫报错&#xff0c;设置代理ip解决&#xff09;requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetError(10054&#xff0c;"远程主机强迫关闭了一个现有的连接。&#xff0c;None&#xff0c;1656&#xff0c;…

【Linux问题处理】Aborted (core dumped)报错python

原文作者&#xff1a;我辈理想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、命令检查1.python执行py文件2.gdb执行py文件 二、进程检查1.检查所有python程序2.使用gdb检查进程 三、core文件检查1.开启core文件存储能…

net::ERR_ABORTED 404 (Not Found)

引用静态资源报错&#xff1a;net::ERR_ABORTED 404 (Not Found) *** 新加入静态资源厚&#xff0c;出现net::ERR_ABORTED 404 (Not Found)&#xff0c;但是路径没有错&#xff0c;在idea上也可以ctrl鼠标左键访问到 解决方法&#xff1a;如果路径确定没有问题。 1、将文件复…

前端报错net::ERR_ABORTED 404的解决方案

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 背景概述 在IDEA项目中添加了新的前端资源&#xff0c;例如&#xff1a;CSS、JS等。在页面中对新资源进行引用时报错net::ERR_ABORTED 404。 解决方案 在此&#xff0c;提…