欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 微服务拆分 示例:黑马商城拆分商品服务模块

微服务拆分 示例:黑马商城拆分商品服务模块

2025/1/22 8:51:35 来源:https://blog.csdn.net/p23gjj/article/details/144649480  浏览:    关键词:微服务拆分 示例:黑马商城拆分商品服务模块

服务拆分原则

什么时候拆?

在实际操作中,我们首先需要确定在项目的哪个阶段进行服务拆分最为合适。例如,是在项目初期就进行拆分,还是在项目发展到一定规模后再进行拆分。选择合适的时机可以避免不必要的风险和成本。

所以,对于大多数小型项目来说,一般是先采用单体架构,随着用户规模扩大、业务复杂后再逐渐拆分为微服务架构

怎么拆?

微服务拆分时粒度要小,这其实是拆分的目标。具体可以从两个角度来分析:

  • 高内聚:每个微服务的职责要尽量单一,包含的业务相互关联度高、完整度高。

  • 耦合:每个微服务的功能要相对独立,尽量减少对其它微服务的依赖,或者依赖接口的稳定性要强。

明确了拆分目标,接下来就是拆分方式了。我们在做服务拆分时一般有两种方式:

纵向拆分:就是按照项目的功能模块来拆分

横向拆分:是看各个功能模块之间有没有公共的业务部分,如果有将其抽取出来作为通用服务 


黑马商城项目结构


拆分商品服务

一般微服务项目有两种不同的工程结构:

  • 完全解耦:每一个微服务都创建为一个独立的工程,甚至可以使用不同的开发语言来开发,项目完全解耦。

    • 优点:服务之间耦合度低

    • 缺点:每个项目都有自己的独立仓库,管理起来比较麻烦

  • Maven聚合:整个项目为一个Project,然后每个微服务是其中的一个Module

    • 优点:项目代码集中,管理和运维方便(授课也方便)

    • 缺点:服务之间耦合,编译时间较长


步骤

1. 在hmall中创建module


 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"><modelVersion>4.0.0</modelVersion><parent><groupId>com.heima</groupId><artifactId>hmall</artifactId><version>1.0.0</version></parent><groupId>com.ktjy</groupId><artifactId>item-service</artifactId><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--common--><dependency><groupId>com.heima</groupId><artifactId>hm-common</artifactId><version>1.0.0</version></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

3.编写启动类

代码如下:

package com.hmall.item;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan("com.hmall.item.mapper")
@SpringBootApplication
public class ItemApplication {public static void main(String[] args) {SpringApplication.run(ItemApplication.class, args);}
}

 4.接下来是配置文件,可以从hm-service业务模块中拷贝

其中application.yaml内容如下 

server:port: 8081
spring:application:name: item-service      # 微服务名称profiles:active: devdatasource:url: jdbc:mysql://${hm.db.host}:3307/hm-item?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ${hm.db.pw}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto
logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"
knife4j:enable: trueopenapi:title: 黑马商城商品管理接口文档description: "黑马商城商品管理接口文档"email: zhanghuyi@itcast.cnconcat: 虎哥url: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- com.hmall.item.controller

 而剩下的application-dev.yamlapplication-local.yaml直接从hm-service拷贝即可,不用更改


5.然后拷贝hm-service中与商品管理有关的代码到item-service,如图

别忘了这里有一个地方的代码需要改动,就是ItemSetviceImpl中的deducStock方法: 

修改前:

修改后: 

这也是因为ItemMapper的所在包发生了变化,所以这里要修改路径


6.导入数据库表。默认的数据库连接的是虚拟机

然后会在数据库创建一个名为hm-item的database,将来的每一个微服务都会有自己的一个database: 


7.配置启动项

在项目中按下Alt+8便可弹出下面的控制台,idea工具版本基本上在2022年版本以上此方法有效

如果控制台出来了启动类没出来的话,点击右侧刷新Maven就有了

 然后右键打开编辑框填写active  profiles:

 


8.启动item-service,,访问商品微服务的swagger接口文档:http://localhost:8081/doc.html

然后测试其中的根据id批量查询商品这个接口,结果如下:

有数据,说明商品微服务抽取成功了!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com