微服务架构:多模块之间通信OpenFeign

目录结构 + OpenFeign 配置 + 每个模块怎么配 yml


一、最终推荐目录结构(我的项目)

XML 复制代码
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

二、OpenFeign 的「全局正确配置」

1. common 的 pom.xml(关键)

XML 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

2. 所有模块的启动类统一开启 Feign

java 复制代码
@SpringBootApplication
@EnableFeignClients(
    basePackages = "com.p2p.common.feign"
)
public class P2pInvestApplication {
    public static void main(String[] args) {
        SpringApplication.run(P2pInvestApplication.class, args);
    }
}

三、Feign Client 示例(和 Controller 一一对应)

LoanFeignClient(invest / risk / notify 用)

java 复制代码
@FeignClient(
    name = "loan-service",
    url = "${loan.service.url}"
)
public interface LoanFeignClient {

    //里面是LoanController里面定义的接口

    @GetMapping("/p2p/loans/getLoan/{loanId}")
    Result<LoanVO> getLoan(@PathVariable Long loanId);

    @PutMapping("/p2p/loans/audit")
    Result<?> audit(@RequestBody LoanAuditDTO dto);
}

UserFeignClient(loan / invest 用)

java 复制代码
@FeignClient(
    name = "user-service",
    url = "${user.service.url}"
)
public interface UserFeignClient {

    //里面是UserController里面定义的接口

    @GetMapping("/p2p/user/{userId}")
    Result<UserDTO> getUser(@PathVariable Long userId);
}

四、每个模块 application.yml(重点)

1. p2p-user(8081)

复制代码
server:
  port: 8081

spring:
  application:
    name: user-service

2. p2p-loan(8083)

复制代码
server:
  port: 8083

spring:
  application:
    name: loan-service

user:
  service:
    url: http://localhost:8081

3. p2p-invest(8082)

复制代码
server:
  port: 8082

spring:
  application:
    name: invest-service

loan:
  service:
    url: http://localhost:8083

user:
  service:
    url: http://localhost:8081

4. p2p-risk(8085)

XML 复制代码
server:
  port: 8085

spring:
  application:
    name: risk-service

invest:
  service:
    url: http://localhost:8084

loan:
  service:
    url: http://localhost:8083

五、模块之间通信关系(我现在这套)

复制代码
invest → loan
invest → user
loan   → user
risk   → invest
risk   → loan
notify → 所有
admin  → 所有

全部通过 Feign

0 Maven 循环依赖


六、我现在这套架构

单体可跑

微服务可拆

Feign 可升级 Nacos

相关推荐
敖正炀19 分钟前
高并发系统的降级预案与容错策略
分布式·架构
敖正炀26 分钟前
稳定性监控与告警体系:SLI/SLO/SLA 实践
分布式·架构
敖正炀1 小时前
故障演练与混沌工程:ChaosBlade 到 Litmus
分布式·架构
敖正炀1 小时前
全链路压测与容量规划方法论
分布式·架构
敖正炀1 小时前
限流算法深度与 Guava/Sentinel 源码:从单机令牌桶到分布式滑动窗口的流量防护体系
分布式·架构
前端小蜗1 小时前
转生到 AI 时代,我不再相信一键生成代码的传说
前端·人工智能·架构
_Evan_Yao2 小时前
限流的艺术:令牌桶与滑动窗口的博弈,以及我为何在 AI 项目中选择了后者
java·后端·架构
沪漂阿龙2 小时前
Hermes Agent 整体架构详解:AI Agent、Memory、Skills、MCP、工具调用、自我改进闭环全解析
人工智能·架构
leijiwen2 小时前
LinkLifeVerse OS:大消费类平台六层架构
架构
漓漾li3 小时前
每日面试题(2026-05-20)- GO AI agent全栈
后端·架构·go