想拿到什么接口,就把接口放到api层
案例目的:拿到auth层的获取用户信息接口
1.在auth-api层的pom文件中引入相关依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.0.7</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
依赖没有做统一的版本管理 后续会讲
2.把UserFeignService里面需要的entity,从auth-controller层抽出来。
auth-controller由于缺失实体类就需要去引入对auth-api层的依赖。(记得clean+install)
3.UserFeignService:
/**
* 用户服务Feign接口。
* 用于远程调用用户服务的相关接口。
*
* @author 陈家威
* @date 2024/7/28
*/
@FeignClient("jc-club-auth-dev")
public interface UserFeignService {
/**
* 根据认证用户信息获取用户详情。
* 通过Feign客户端,向用户服务发送请求,获取指定用户的详细信息。
*
* @param authUserDTO 认证用户DTO,包含用户的认证信息。
* @return Result<AuthUserDTO> 返回一个包含用户详情的结果对象。
*/
@RequestMapping("/user/getUserInfo")
Result<AuthUserDTO> getUserInfo(@RequestBody AuthUserDTO authUserDTO);
}
4.开始在subeject层调用接口了
subejct-infra的pom文件引入对auth-api层的依赖 并在rpc包下建UserRpc
/**
* 用户RPC服务类,用于通过远程调用获取用户信息。
*/
@Component
public class UserRpc {
/**
* 用户Feign服务依赖注入,用于执行远程调用。
*/
@Resource
private UserFeignService userFeignService;
/**
* 从远程服务获取指定用户名的用户信息。
*
* @param userName 需要查询的用户名
* @return UserInfo 对象,包含用户信息;如果远程调用失败或无数据,返回空UserInfo对象
*/
public UserInfo getUserInfo(String userName) {
// 创建认证用户数据传输对象,并设置用户名
AuthUserDTO authUserDTO = new AuthUserDTO();
authUserDTO.setUserName(userName);
// 调用Feign服务获取用户信息
Result<AuthUserDTO> result = userFeignService.getUserInfo(authUserDTO);
// 创建用户信息对象,准备填充数据或作为默认返回值
UserInfo userInfo = new UserInfo();
// 检查远程调用结果是否成功
if (!result.getSuccess()) {
// 如果不成功,直接返回空UserInfo对象
return userInfo;
}
// 获取远程调用返回的数据
AuthUserDTO data = result.getData();
// 填充用户信息对象
userInfo.setUserName(data.getUserName());
userInfo.setNickName(data.getNickName());
// 返回填充后的用户信息对象
return userInfo;
}
}
5.测试调用
@RestController
@RequestMapping("/subject/category")
@Slf4j
public class TestFeignController {
@Resource
private UserRpc userRpc;
@GetMapping("testFeign")
public void testFeign() {
UserInfo userInfo = userRpc.getUserInfo("jichi");
log.info("testFeign.userInfo:{}", userInfo);
}
}
(记得在subject启动类加@EnableFeignClients="com.jingdianjichi"才会读取feign相关的注解)