微服务架构:多模块之间通信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

相关推荐
衡石科技2 小时前
衡石高性能分析架构:HQL、查询下推与多层加速的协同设计
架构·数据分析
Tokenfree3 小时前
换模型也要灰度:10% → 50% → 100%,每一档只看三个指标
架构
vivo互联网技术3 小时前
把 Agent 的判断与行动变成可恢复的软件事实|KDC 系列 工程篇
架构·agent·ai编程
用户094248568033 小时前
第19章:库存扣减与秒杀系统:Redis 扛峰值流量
redis·架构·源码
leo在掘金4 小时前
2.8万亿MoE跑昇腾:0 Day适配改了啥
后端·架构
广凌科技5 小时前
广凌校园物联网中台整体解决方案:三层架构驱动校园数字化智治
物联网·架构
这个DBA有点耶6 小时前
Merge还是Materialize?一文讲透MySQL 8.0 CTE底层的执行计划博弈与性能陷阱
数据库·mysql·架构
一条Go6 小时前
四个进程,一把锁:Alioth 的告警评测为什么不需要消息队列
后端·设计模式·架构
得物技术7 小时前
多 Agent 架构的三次反转:从中心调度到自驱协作|得物技术
程序员·架构·llm
Decay__9 小时前
19_MySQL 告警与自动化运维 —— 告警分级收敛 / Webhook / 定时巡检 / 脚本库
运维·数据库·sql·mysql·架构