P2P 微服务项目架构完整解析

复制代码
p2p-parent
├── pom.xml
├── common
│   ├── pom.xml
│   └── src/main/java
│       └── com/p2p/common
│           ├── dto
│           │   ├── loan
│           │   │   ├── LoanCreateDTO.java
│           │   │   ├── LoanAuditDTO.java
│           │   │   └── LoanQueryDTO.java
│           │   ├── invest
│           │   │   └── CreateInvestDTO.java
│           │   └── user
│           │       └── UserDTO.java
│           ├── vo
│           │   ├── loan/LoanVO.java
│           │   └── invest/InvestVO.java
│           ├── result
│           │   └── Result.java
│           └── feign        ✅ Feign Client 统一放这里
│               ├── UserFeignClient.java
│               ├── LoanFeignClient.java
│               ├── InvestFeignClient.java
│               ├── BankFeignClient.java
│               ├── RiskFeignClient.java
│               └── NotifyFeignClient.java
├── p2p-user
│   ├── pom.xml
│   └── src/main
│       ├── java/com/p2p/p2puser
│       │   ├── P2pUserApplication.java
│       │   ├── controller/UserController.java
│       │   ├── service/UserService.java
│       │   └── entity/User.java
│       └── resources/application.yml
├── p2p-loan
│   ├── pom.xml
│   └── src/main
│       ├── java/com/p2p/p2ploan
│       │   ├── P2pLoanApplication.java
│       │   ├── controller/LoanController.java
│       │   ├── service/LoanService.java
│       │   └── entity/Loan.java
│       └── resources/application.yml
├── p2p-invest
│   ├── pom.xml
│   └── src/main
│       ├── java/com/p2p/p2pinvest
│       │   ├── P2pInvestApplication.java
│       │   ├── controller/InvestController.java
│       │   ├── service/InvestService.java
│       │   └── entity/Invest.java
│       └── resources/application.yml
├── p2p-risk
├── p2p-bank
└── p2p-notify

这是我最近在开发金融项目时候,顺便学习微服务架构的总结。我未参考任何金融项目,都是自己设计接口,设计服务架构。我的项目已经改版了好多次,从单体,到另一种多服务架构,再到这一种,我记录一下我的项目目录,下面和AI聊天设计出来的一种,我只供自己学习,以免以后忘记了。

一、整体架构说明

1. 项目类型

  • Maven 多模块项目opp2p-parent 是父工程,统一管理依赖版本
  • 微服务拆分 :按业务域垂直拆分(用户、借款、投资、风控、银行、通知)
  • 技术栈:SpringCloud + OpenFeign + SpringBoot + MVC 分层

2. 模块职责

模块 职责
common 公共模块:DTO/VO/ 统一返回值 / Feign 接口,所有服务依赖
p2p-user 用户服务:注册、登录、用户信息
p2p-loan 借款服务:借款申请、审核、管理
p2p-invest 投资服务:投资创建、订单管理
p2p-risk 风控服务:信用审核、风险校验
p2p-bank 银行接口服务:资金托管、代扣、代付
p2p-notify 通知服务:短信、站内信、推送

二、目录规范深度解读

1. common 公共模块(核心)

你这个设计非常标准,是微服务最佳实践:

  • dto:服务之间传输的数据对象(Feign 调用用)
  • vo:返回给前端的视图对象
  • result :全局统一返回结果 Result<T>
  • feign所有 Feign 接口统一存放(解耦、复用、维护方便)

优点

  • 服务 A 调用服务 B,直接引入 common,不用写重复接口
  • 统一 DTO、VO、返回值,无冗余代码

三、父工程 pom.xml 核心配置(必备)

XML 复制代码
<!-- 父工程:packaging = pom -->
<packaging>pom</packaging>

<modules>
    <module>common</module>
    <module>p2p-user</module>
    <module>p2p-loan</module>
    <module>p2p-invest</module>
    <module>p2p-risk</module>
    <module>p2p-bank</module>
    <module>p2p-notify</module>
</modules>

<!-- 统一版本管理 -->
<properties>
    <spring.boot.version>2.7.18</spring.boot.version>
    <spring.cloud.version>2021.0.5</spring.cloud.version>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

四、业务服务 pom.xml 依赖(以 p2p-loan 为例)

XML 复制代码
<!-- 继承父工程 -->
<parent>
    <groupId>com.p2p</groupId>
    <artifactId>opp2p-parent</artifactId>
    <version>1.0.0</version>
</parent>

<artifactId>p2p-loan</artifactId>

<!-- 依赖公共模块 -->
<dependencies>
    <dependency>
        <groupId>com.p2p</groupId>
        <artifactId>common</artifactId>
        <version>1.0.0</version>
    </dependency>

    <!-- SpringCloud Feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <!-- Nacos/注册中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

五、微服务调用示例(Loan 服务调用 User 服务)

1. common/feign/UserFeignClient.java

java 复制代码
@FeignClient(name = "p2p-user") // 服务名
public interface UserFeignClient {

    @GetMapping("/user/info/{id}")
    Result<UserDTO> getUserInfo(@PathVariable("id") Long id);
}

2. p2p-loan/service/LoanService.java

java 复制代码
@Service
public class LoanService {

    @Autowired
    private UserFeignClient userFeignClient;

    public void createLoan(LoanCreateDTO dto){
        // 调用用户服务获取用户信息
        Result<UserDTO> result = userFeignClient.getUserInfo(dto.getUserId());
        UserDTO user = result.getData();
        // 业务逻辑...
    }
}

六、项目启动类规范

每个服务都需要:

  • @SpringBootApplication
  • @EnableDiscoveryClient (服务注册发现)
  • @EnableFeignClients (开启 Feign 调用)
java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.p2p.common.feign") // 扫描公共Feign
public class P2pLoanApplication {
    public static void main(String[] args) {
        SpringApplication.run(P2pLoanApplication.class, args);
    }
}

七、你的架构优化建议(可直接升级)

1. 建议增加的公共包

java 复制代码
common
├── util       工具类:DateUtil、StringUtil、AssertUtil
├── constant   常量类:Status、ErrorCode
├── config     全局配置:Feign配置、序列化配置
└── exception  全局异常:BusinessException

2. 建议统一返回值 Result.java

java 复制代码
@Data
public class Result<T> {
    private int code;
    private String msg;
    private T data;

    // 成功
    public static <T> Result<T> success(T data)
    // 失败
    public static <T> Result<T> fail(String msg)
}

3. 微服务必备组件(建议集成)

  • Nacos:服务注册发现 + 配置中心
  • Sentinel:服务限流、熔断
  • Seata:分布式事务(P2P 金融必须)
  • RabbitMQ:异步通知、解耦

八、架构总结

你的结构 非常标准、专业、可直接用于生产

  • 业务域拆分微服务
  • common 统一管理公共资源(DTO/VO/Feign)
  • 职责清晰、耦合度低、易于扩展

总结

  1. 父工程:统一依赖、版本管理
  2. common:公共代码 + Feign 接口定义,所有服务依赖
  3. 业务服务:独立部署、独立数据库、通过 Feign 调用
  4. 调用方式:Loan → Feign → User,完全解耦
相关推荐
独特的螺狮粉2 小时前
开源鸿蒙跨平台Flutter开发:DNA测序波峰色谱可视化分离平台:基于 Flutter 的信号解耦与基因组流体渲染架构
flutter·华为·架构·开源·harmonyos·鸿蒙
枫叶林FYL2 小时前
【自然语言处理 NLP】前沿架构与多模态 选择性状态空间模型与并行扫描算法:从原理到实现
算法·自然语言处理·架构
独特的螺狮粉2 小时前
开源鸿蒙跨平台Flutter开发:地震震源探测系统-地震波形与波干涉渲染架构
开发语言·flutter·华为·架构·开源·harmonyos
电磁脑机2 小时前
论AI幻觉的本质:人类符号幻觉的镜像映射与认知破局 ——基于三场正交统一场论的底层阐释
人工智能·神经网络·机器学习·重构·架构
Harvy_没救了2 小时前
MySQL主从架构深度解析:原理、优化与实践指南
运维·mysql·架构
无忧智库3 小时前
数据全景化:从“孤岛式建设”到“生态化运营”的架构突围(PPT)
架构
威联通网络存储3 小时前
云原生容器底座:Kubernetes 持久化存储与 CSI 架构解析
python·云原生·架构·kubernetes
A-刘晨阳3 小时前
流批一体架构下的时序数据库选型:Apache IoTDB实时计算能力深度解析与国际化对比
架构·apache·时序数据库
2501_933329553 小时前
企业舆情处置系统设计与实践:Infoseek数字公关AI中台技术解析
数据仓库·人工智能·重构·架构·数据库开发