10 KiB
title, url, publishedTime
| title | url | publishedTime |
|---|---|---|
| 用户微服务搭建 - 犬小哈专栏 | https://www.quanxiaoha.com/column/10309.html | 用户微服务搭建 |
在上一章 中,我们已经将对象存储服务搭建完成了。也就是说,如下图所示,修改用户信息接口所需的下游服务已经搞定了,现在开始搭建上游的用户服务。
为什么要单独拆分一个用户服务?
为什么不直接在认证服务中写修改用户信息接口,而是单独拆分一个用户服务呢?优势如下:
-
单一职责原则(SRP):每个服务只处理特定的职责,代码更清晰,维护更容易。用户服务专门处理用户相关的功能,如用户资料等,而认证服务用户专门处理令牌授权、安全相关的。
-
独立扩展:可以根据不同的负载需求独立扩展认证服务和用户服务。例如,登录和认证的请求量可能会比用户管理的请求量高得多。
-
安全性:认证服务可以特别加强安全措施,因为它处理敏感的认证信息和令牌管理。
-
独立开发和部署:团队可以独立开发和部署这两个服务,减少相互之间的影响,提高开发效率。
-
灵活性:可以根据需要选择不同的技术栈和工具。例如,可以使用专门的身份认证框架来构建认证服务。
新建用户服务
在 xiaohashu 文件夹上右键 | New | Module ,新建用户服务模块:
xiaohashu/
|- xiaohashu-oss
|- xiaohashu-user
|- 省略...
填写相关配置项,如下:
点击 Create 按钮,开始创建服务。等待项目生成完毕后,观察最外层 pom.xml 文件的 <modules> 节点,会发现节点下已经自动添加好了该模块:
将用户服务项目的 /src 文件夹删除掉,只保留 pom.xml 文件,因为我们依然要创建和对象存储服务一样的结构:
xiaohashu-user/
|- xiaohashu-user-api
|- xiaohashu-user-biz
删除完毕后,目前文件结构如下:
编辑 xiaohashu-user 的 pom.xml 文件,修改如下:
<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.quanxiaoha</groupId>
<artifactId>xiaohashu</artifactId>
<version>${revision}</version>
</parent>
<!-- 多模块项目需要配置打包方式为 pom -->
<packaging>pom</packaging>
<!-- 子模块管理 -->
<modules>
</modules>
<artifactId>xiaohashu-user</artifactId>
<!-- 项目名称 -->
<name>${project.artifactId}</name>
<!-- 项目描述 -->
<description>用户服务</description>
</project>
新建 xiaohashu-user-api 子模块
接着,在 xiaohashu-user 文件上右键 | New | Module , 新建 xiaohashu-user-api 子模块。填写相关选项,如下:
等待模块创建完毕后,将 App 类、/test 文件夹删除掉:
编辑其 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>
<!-- 指定父项目 -->
<parent>
<groupId>com.quanxiaoha</groupId>
<artifactId>xiaohashu-user</artifactId>
<version>${revision}</version>
</parent>
<!-- 打包方式 -->
<packaging>jar</packaging>
<artifactId>xiaohashu-user-api</artifactId>
<name>${project.artifactId}</name>
<description>RPC层, 供其他服务调用</description>
<dependencies>
<dependency>
<groupId>com.quanxiaoha</groupId>
<artifactId>xiaoha-common</artifactId>
</dependency>
</dependencies>
</project>
新建 xiaohashu-user-biz 子模块
接着开始创建 xiaohashu-user-biz 业务模块,填写相关选项,如下:
模块创建完成后,将 App 类,以及单元测试类删除,保留结构如下:
编辑其 pom.xml 文件,修改如下:
<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.quanxiaoha</groupId>
<artifactId>xiaohashu-user</artifactId>
<version>${revision}</version>
</parent>
<!-- 打包方式 -->
<packaging>jar</packaging>
<artifactId>xiaohashu-user-biz</artifactId>
<name>${project.artifactId}</name>
<description>用户服务业务模块</description>
<dependencies>
<dependency>
<groupId>com.quanxiaoha</groupId>
<artifactId>xiaoha-common</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
别忘了刷新一下 Maven, 将包下载到本地仓库中。
添加 /resources 目录
在 /java 的同级目录下新建一个 /resources 资源目录,并将对象存储服务的相关配置文件,直接复制过来,如下:
application.yml 配置文件中,将端口修改一下,防止在本地测试时,和其他服务的端口冲突:
server:
port: 8082 # 项目启动的端口
spring:
profiles:
active: dev # 默认激活 dev 本地开发环境
日志配置 logback-spring.xml 的应用名称修改为 user , 其他都不用动,如下:
<configuration>
// 省略...
<!-- 应用名称 -->
<property scope="context" name="appName" value="user"/>
// 省略...
</configuration>
添加启动类
配置文件创建完成后,创建 Spring Boot 项目的启动类 XiaohashuUserBizApplication , 代码如下:
package com.quanxiaoha.xiaohashu.user.biz;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class XiaohashuUserBizApplication {
public static void main(String[] args) {
SpringApplication.run(XiaohashuUserBizApplication.class, args);
}
}
启动服务
点击启动类 main() 方法左侧的启动按钮,看看服务是否能够正常跑起来,如下所示,没有问题:
注册到 Nacos 上
接下来,我们将用户服务注册到 Nacos 上。编辑 xiaohashu-user-biz 模块的 pom.xml 文件,添加服务发现相关依赖,如下:
// 省略...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
// 省略...
依赖添加完毕后,刷新一下 Maven 。在 /resources/config 文件夹下,创建 bootstrap.yml 配置文件:
配置如下:
spring:
application:
name: xiaohashu-user # 应用名称
profiles:
active: dev # 默认激活 dev 本地开发环境
cloud:
nacos:
discovery:
enabled: true # 启用服务发现
group: DEFAULT_GROUP # 所属组
namespace: xiaohashu # 命名空间
server-addr: 127.0.0.1:8848 # 指定 Nacos 配置中心的服务器地址
Tip
: 将应用名称修改为
xiaohashu-user, 其他不用动。
重启用户服务,观察控制台日志,看看服务是否正常跑起来了,若运行正常,再登陆到 Nacos 控制台,确认一下服务是否注册成功,如下所示,说明认证服务的项目就大致搭建好了:
小作业:全局异常捕获器
最后,给小伙伴们留个小作业,自行将全局异常捕获器添加到刚刚创建完成的用户服务中,结构如下图所示:
记得将异常状态码枚举类的服务标识修改为 USER , 如下:
遇到问题的小伙伴,也可以下载本小节的源码进行比对,或者在星球提问哟~