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

相关推荐
candyTong2 小时前
一觉醒来,大模型就帮我排查完页面性能问题
前端·javascript·架构
空中海5 小时前
Kubernetes 入门基础与核心架构
贪心算法·架构·kubernetes
米高梅狮子6 小时前
08.CronJob和Service
云原生·容器·架构·kubernetes·自动化
SamDeepThinking8 小时前
中小团队需要一个资源微服务
后端·微服务·架构
两万五千个小时8 小时前
为什么你的 Agent 读了文件,却好像什么都没读到?
人工智能·程序员·架构
非优秀程序员9 小时前
智能体的构成--深入探讨Anthropic、OpenAI、Perplexity和LangChain究竟在构建什么。
人工智能·架构·开源
码点滴9 小时前
从“失忆症“到“数智分身“:Hermes Agent 如何重塑你的 AI 交互体验?
人工智能·架构·prompt·ai编程·hermes
狗哥哥9 小时前
面包屑自动推导的算法设计:从“最短路径匹配”到工程可落地
算法·架构
CinzWS10 小时前
A53性能验证:从微架构到系统级——芯片性能的“全息检测“
架构·芯片验证·原型验证·a53
不才小强10 小时前
gRPC实战指南:高性能微服务通信框架
微服务·云原生·架构