springCloud 微服务之间通过feign调用接口

假设现在有个订单服务(my-order)和用户服务(my-user),订单服务需要调用户服务下UserInforController的一个获取用户信息接口 /user-info/list,该接口请求方式为get

实现步骤:

1、首先在订单服务模块下创建一个 FeignClient interface

@FeignClient(contextId = "myUserInfoResource",name = "my-user",path = "/user-info/list")
public interface MyUserInfoFeign {

    @RequestMapping("/list")
    @ApiOperation(value = "游戏道具数据查询",notes = "游戏道具数据查询",httpMethod = "GET")
    ResultData<List<UserInfo>> list(@RequestParam(name = "userId") String userId);
}

2、在订单服务模块下创建一个FeignService

@Service
@Slf4j
public class MyUserInfoFeignService {

    @Resource
    private MyUserInfoFeign  myUserInfoFeign; 

@Async
public CompletableFuture<List<UserInfo>> getUserInfoList(String userId){

long startTime = System.currentTimeMillis();
ResultData
<List<UserInfo>> userList=
myUserInfoFeign.list(userId);
  if(userList.getCode() != 200){ 
      throw new MyException(500 , "my-user服务不可用"); 
}
log.info(
"异步执行远程调用耗时:{}毫秒" , System.currentTimeMillis() - startTime);

return AsyncResult.forValue(
userList.getData()).completable();
 } 
}

3、通过调FeignService获取结果

@Resource
private MyUserInfoFeignService myUserInfoFeignService ;
public List<UserInfo> list( String userId){
        List<UserInfo> userList=null;
        CompletableFuture<List<UserInfo>> userinfoFutrue=myUserInfoFeignService .getUserInfoList(userId); 
try {
userList
=
userinfoFutrue.get();
    }catch (Exception e){
e.printStackTrace();
}
return ResultData.success(
userList);
}

 

posted @ 2022-08-26 10:55  smellycats  阅读(240)  评论(0编辑  收藏  举报