微服务之间feign的调用

 想拿到什么接口,就把接口放到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相关的注解)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值