8.6 KiB
本小节中,我们来为小哈书创建一个新的微服务 —— 对象存储微服务,用于提供图片上传存储功能。
项目基本结构
和之前创建的 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, 一切正常。至此,对象存储服务项目基本骨架都搭建完毕啦~