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

相关推荐
fanly112 小时前
Surging AI Agent 完整产品介绍
微服务·microservice
杉氧8 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
杉氧8 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
Lion099 小时前
ReAct 循环:Agent 的思考引擎 — Think → Act → Observe
架构
得物技术11 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
自珍JAVA12 小时前
Superpowers AI编码秩序
架构
古茗前端团队13 小时前
急招!前端|测试|后端|产品(名额多,速来)
前端·后端·架构
木雷坞15 小时前
我再也不敢随手 `docker compose down -v` 了
架构
没落英雄15 小时前
从零开始搭建一个 AI Agent —— LangChain + TypeScript 实战手记
前端·人工智能·架构
doiito15 小时前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent