1) 只有oj-backend-service-client(公共服务接口模块)需要导入OpenFeign依赖,启动时报错缺少负载均衡器依赖,父工程中添加
<!-- oj-backend-service-client中添加 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 父工程中添加 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.1.5</version>
</dependency>
2) xxxFeignClient的类加上@FeignClient(name = "oj-backend-user-service", path = "/api/user/inner")
,其中name 是服务注册在Nacos中的名字,path会为下面的每一个方法都加上这个前缀
3) xxxFeignClient中的方法标记好@GetMapping…和@RequestBody…,
- 要注意的是@RequestParam(“value”)的括号里必须填上与形参名一致的字符串
- 这个类里的方法形参必须满足:非空、不能泛型、不能传HttpServletRequest,要保证形参是一个简单对象
/**
* 获取当前登录用户
*
* @param request
* @return
*/
default User getLoginUser(@RequestBody HttpServletRequest request) {
//不能传request
User user = (User)request.getSession().getAttribute(UserConstant.USER_LOGIN_STATE);
if (user == null) { //不能传空
return null;
}
return getLoginUser(user);
}
/**
* 替换掉request参数
* @param currentUser
* @return
*/
@PostMapping("/get/login")
User getLoginUser(@RequestBody User currentUser);
4)业务模块的启动类加上两个注解
@EnableDiscoveryClient //开启远程调用
//这里指定的是OpenFeign接口的包,告诉启动器在哪里找这些OpenFeign接口,不然找不到在哪
@EnableFeignClients(basePackages = {"com.zun.ojbackendserviceclient.service"})