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);
}