刚学Feign然后就用Feign来进行接口调试主要是记录一下遇到的坑
注册服务等就不详细说明了,因为这个主要是记录使用Feign的接口调用时出现的问题
在Feign的接口中定义一个和服务提供方中一致的方法
服务提供方
@RestController
@RequestMapping("user")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/ids")
public List<User> findByIds(String ids){
return userService.findByIds(ids);
}
}
服务消费端直接调用Feign接口中的方法(注意:方法的返回类型,方法名,参数,修饰符,访问路径要一致)
@GetMapping("/user/ids") 这里的user是UserController类上面的访问路径
@FeignClient(value = "user-service",fallback =UserFeignClientFallback.class)
public interface UserFeignClient {
@GetMapping("/user/ids")
List<User> findByIds( String ids);
}
然后写一个Feign接口方法调用失败时的类实现自己自定义的Feign接口
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override
public List<User> findByIds(String ids) {
List<User> list=new ArrayList<>();
User user=new User();
user.setId(2);
user.setName("用户查询出现异常!");
list.add(user);
return list;
}
}
然后访问服务消费端出现错误
刚开始以为是Feign设置熔断时间太短导致数据查找不到,然后修改了Feign的熔断时间还是报错,后面发现修改成下面这样就可以访问到了,当然也有可能是我哪里写错了,目前我只找到这种解决方式如果有其它方式忘告知
服务提供方修改
@RestController
@RequestMapping("user")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{ids}")
public List<User> findByIds(@PathVariable("ids") ids){
return userService.findByIds(ids);
}
}
Feign接口
@FeignClient(value = "user-service",fallback =UserFeignClientFallback.class)
public interface UserFeignClient {
@GetMapping("/user/{ids}")
List<User> findByIds(@PathVariable("ids") String ids);
}
然后访问服务消费端数据出现