目录结构 + 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