weblog/doc/9、用户服务搭建与开发/9.1 用户微服务搭建(1).md
2025-02-17 11:57:55 +08:00

10 KiB
Raw Blame History

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-userpom.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 , 如下:

遇到问题的小伙伴,也可以下载本小节的源码进行比对,或者在星球提问哟~

本小节源码下载

https://t.zsxq.com/RdbqW