weblog/doc/8、对象存储服务搭建与开发/8.2 对象存储微服务搭建.md
2025-02-17 10:05:44 +08:00

8.6 KiB
Raw Blame History

本小节中,我们来为小哈书创建一个新的微服务 —— 对象存储微服务,用于提供图片上传存储功能。

项目基本结构

和之前创建的 xiaohashu-auth 认证服务的项目结构有所区别,这次创建的对象存储服务,是个多模块结构,大致如下:

xiaohashu-oss/ (父项目)
   |- xiaohashu-oss-api (Api层)
   |- xiaohashu-oss-biz (业务层)

可以看到,有两个子模块:

  • xiaohashu-oss-api : API 层,用于放置 Feign 接口配置,服务间调用的 DTO 出入参实体类等;

    举个栗子,如下图所示,前端请求修改用户信息接口,如果修改了用户头像、背景图,用户服务需要调用下游对象存储服务,将文件传输过去,由对象存储将图片上传至 Minio , 或者是别的对象存储中间件中。

    注意了,这中间用户服务需要调用对象存储服务的上传图片接口,就需要有明确的接口地址,出入参实体类,如果在这两个服务中都定义一份,代码就非常冗余。通过提取一个 API 模块,将通用的代码都放置在此模块里,后续用户服务只需引入 xiaohashu-oss-api 模块即可,无需二次定义。

  • xiaohashu-oss-biz : 对象存储的核心业务层,如上传图片至 Minio 的具体实现。

新建父模块

明确了对象存储服务的大致结构后,接下来开始动手创建该微服务。在父项目上右键 | New | Module , 新建一个子模块:

填写项目相关配置项,如下图所示:

解释一下:

  • ①:选择 Maven Archetype 来创建一个 Maven 项目;
  • ②:项目名称;
  • ③:父项目指定为 xiaohashu
  • IDEA 需要知道 Maven Archetype Catalog 的位置,以便从中获取可用的 Archetype 列表。这个 Catalog 文件通常包含了 Maven 官方仓库或其他远程仓库中可用的 Archetype 信息。选择 Internal 即可。
  • ⑥:通过使用 Archetype你可以基于已有的项目模板创建一个新项目。这里选择 maven-archetype-quickstart

点击 Create 按钮创建项目。等待创建完成后,将/src 目录删除掉,只保留下图部分:

同时,如果你打开项目最外层的 pom.xml 文件,会发现对象存储模块已经自动加入 <modules> 节点下管理了:

    <!-- 子模块管理 -->
    <modules>
		// 省略...
		
        <!-- 对象存储服务 -->
        <module>xiaohashu-oss</module>
    </modules>

接着,编辑 xiaohashu-oss 服务的 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-oss</artifactId>
    <!-- 项目名称 -->
    <name>${project.artifactId}</name>
    <!-- 项目描述 -->
    <description>对象存储服务</description>

</project>

新建 xiaohashu-oss-api 子模块

继续创建对象存储服务的子模块。在 xiaohashu-oss右键 | New | Module, 创建子模块:

填写相关配置项,如下图所示,注意,Parent 需要勾选为 xiaohashu-oss

点击 Create 按钮,等待子模块创建完成后,编辑其 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-oss</artifactId>
        <version>${revision}</version>
    </parent>

    <!-- 打包方式 -->
    <packaging>jar</packaging>

    <artifactId>xiaohashu-oss-api</artifactId>
    <name>${project.artifactId}</name>
    <description>RPC层, 供其他服务调用</description>

    <dependencies>
        <dependency>
            <groupId>com.quanxiaoha</groupId>
            <artifactId>xiaoha-common</artifactId>
        </dependency>
    </dependencies>


</project>

同时将模块中无用的类、文件夹删除掉,如下图所示:

删除完毕后,目前 xiaohashu-oss-api 模块下就基本全空了,先不用管,等后续再来填充内容。

新建 xiaohashu-oss-biz 业务模块

继续创建 xiaohashu-oss-biz 业务模块,配置项填写如下:

等待项目创建完毕后,编辑其 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-oss</artifactId>
        <version>${revision}</version>
    </parent>

    <!-- 打包方式 -->
    <packaging>jar</packaging>

    <artifactId>xiaohashu-oss-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>

xiaohashu-oss-biz 模块是项目启动模块,所以要添加 spring-boot-starter-web 依赖 , 以及打包插件。同样的,删除掉一些无用的类,并创建项目启动类、application.yml 配置文件、logback 配置文件,创建完成后,结构如下图所示:

项目启动类

package com.quanxiaoha.xiaohashu.oss.biz;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class XiaohashuOssBizApplication {

    public static void main(String[] args) {
        SpringApplication.run(XiaohashuOssBizApplication.class, args);
    }

}

application.yml 配置文件

server:
  port: 8081 # 项目启动的端口

spring:
  profiles:
    active: dev # 默认激活 dev 本地开发环境

注意,端口要和认证服务区别开,不能共用一个,这里用的 8081

logback 日志配置

logback-spring.xml 直接从认证服务中复制一份过来,只需将应用名称修改成 oss 即可 , 如下:

<configuration>

	// 省略...

    <!-- 应用名称 -->
    <property scope="context" name="appName" value="oss"/>

    // 省略...
    

</configuration>

测试一波

以上都配置完成后,点击 XiaohashuOssBizApplication 启动类中的启动图标,看看服务能否正常运行起来:

OK, 一切正常。至此,对象存储服务项目基本骨架都搭建完毕啦~

本小节源码下载

https://t.zsxq.com/kuB2B