业务流程分析

服务划分
- 网关服务
- 统一分发请求
- 统一认证鉴权
- 负载均衡
- 用户服务
- 用户管理,增删查改
- 角色管理
- 权限管理
- 发送用户操作日志
- 商铺服务
- 商铺管理
- 商品服务
- 商品管理
- 库存服务
- 库存管理
- 订单服务
- 订单管理
- 支付服务
- 提供支付接口
- 日志服务
- 统一记录日志
- ELK
ER图


技术栈
项目开发
依赖版本
从 版本发布说明-Spring Cloud Alibaba 可知 Spring Cloud Alibaba(SCA)与其他组件对应的版本
在项目 pom.xml 文件中引入某版本的 SCA,随后 Ctrl + 右键
查看它定义的依赖版本。
官网和 Github 上的文档更新有一定的滞后性,若需使用最新稳定版本的 SCA,请用第二种方法查看各组件版本。
我这里因为事先已将 Nacos.2.4.2 配置完毕,所以选用了最新的 SCA.2023.0.3.2
建立项目
父项目
- 删除 src 目录
- 配置 pom.xml 文件,作为配置中心,统一配置和控制依赖版本,内容大致如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| ...
<modelVersion>4.0.0</modelVersion>
<!--删除原来的父项目-->
<groupId>me.lhy</groupId>
<artifactId>malling</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>malling</name>
<description>malling</description>
<!--删除多余的标签-->
<!--将子模块添加进来-->
<modules>
<module>commons</module>
<!--...-->
<module>user</module>
</modules>
<!--将依赖的版本号定义为属性,方便统一查看管理-->
<properties>
<java.version>17</java.version>
<spring-boot.version>3.2.9</spring-boot.version>
<spring-cloud.version>2023.0.3</spring-cloud.version>
<spring-cloud-alibaba.version>2023.0.3.2</spring-cloud-alibaba.version>
...
</properties>
<!--将所有依赖做好版本声明-->
<dependencyManagement>
<dependencies>
<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring CLoud Alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
<!--声明项目的 jdk、maven 版本以及编码格式-->
<!--通用的 maven 插件配置-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
...
</plugins>
</build>
</project>
|
插件
flatten-maven-plugin
对CI/CD友好,去除,使每个子模块版本明确
常见配置:
父项目 pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| ...
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
...
<properties>
...
<revision>1.0.0</revision>
...
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.2.7</version> <!-- 请根据实际情况选择版本 -->
<configuration>
<updatePomFile>true</updatePomFile> <!-- 是否更新原始 pom.xml 文件 -->
<flattenMode>resolveCiFriendliesOnly</flattenMode> <!-- 可选模式 -->
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>package</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
|
在这个配置中,flatten-maven-plugin
被绑定到了 package
和 clean
生命周期阶段,这意味着它会在打包过程中自动执行平坦化操作,并且在清理项目时也会清理掉平坦化的 pom.xml
文件。
子模块 pom.xml:
1
2
3
4
5
6
7
8
| ...
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${revision}</version>
<relativePath>../../pom.xml</relativePath>
</parent>
...
|
maven-compiler-plugin
若spring版本较高使用时需配置如下,否则请求路径会被解析为静态资源
1
2
3
4
5
6
7
| <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<parameters>true</parameters>
</configuration>
</plugin>
|
配置 Nacos
据 单机模式部署 | Nacos 官网 文档所述,执行以下步骤:
- 下载对应版本的 alibaba/nacos 并解压。
- 创建一个数据库,执行 nacos/conf/mysql-schema.sql 以创建 nacos 所需表。
- 进入 nacos/conf,编辑 application.properties 文件,将与数据源相关的配置取消注释,并且填上数据库相关信息。

- 修改 nacos/bin 目录下的 startup.cmd,右键 -> 在记事本中编辑,将 set MODE=“cluster” 改为 set MODE=“standalone”。也可使用命令行的方式,在当前目录下执行
startup.cmd -m standalone
。 - 在欲使用 nacos 的模块的启动类上添加
@EnableDiscoveryClient
- 在模块的 application.yml 中配置 nacos
1
2
3
4
5
6
7
| spring:
application:
name: xxx
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
|
我遇到的问题:在正确配置数据源后,启动 nacos 遭遇如下报错:
Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed
这是由于 MySQL 8 默认使用 caching_sha2_password
身份验证插件,但客户端默认不允许公钥检索,在 application.properties 的数据库连接串后加上 &allowPublicKeyRetrieval=true
即可。
公共模块(commons)
作用:存储公用的实体类、工具类、异常和异常处理,引入公用的依赖
- 删除启动类和 application.properties 配置文件,否则会覆盖引入了 commons 的其他模块的配置
- 在 pom.xml 文件声明父项目,并引入公用的依赖
注意:scope 为 test、provided 和 system 等,则 commons 中的依赖不会传递给引入它的模块
网关服务
要求功能:
用户服务
用户登录
新增用户
删除用户
查询用户
修改用户信息
商铺服务
商品服务
订单服务
日志服务
配置 OpenFeign
- 在 pom.xml 中添加 spring-cloud-starter-openfeign 依赖
- 在模块启动类上添加
@EnableFeignClients
- 使用如下:
1
2
3
4
5
6
| @FeignClient(name = "receive-service", path = "/receive")
public interface SendService{
@RequestMapping("/test")
String test();
}
|