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

相关推荐
省钱兄--zs8 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
用户0390614707198 小时前
PMSM 矢量控制(FOC)环路公式推导
架构
HaipengYu8 小时前
从 Config Hook 到 Server/TUI:OpenCode 插件 V1 到 V2 的架构演进
人工智能·架构
罗丹丹Luna8 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构
吴凡wudianmei8 小时前
每调一次模型都花钱?如何用工程手段把调用压到最少?
前端·后端·架构
欣欣之王来了8 小时前
Vue3项目脚手架:Vite vs Vue CLI怎么选?
前端·学习·架构·项目·vue3教程
姜鱼问生9 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
崎岖Qiu9 小时前
MCP 的架构、协议分层与通信过程
后端·ai·架构·agent·mcp
这个DBA有点耶9 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构