当使用假装客户端的 rest 调用失败时,不会调用回退方法



我正在尝试使用 Feign 客户端实现回退,但没有成功。这是一个最简单的代码,请在下面找到。

主类

@SpringBootApplication
@EnableDiscoveryClient
@RestController
@EnableFeignClients
public class EurekaClient1Application {
@Autowired
public DiscoveryClient discoveryClient;
public static void main(String[] args) {
SpringApplication.run(EurekaClient1Application.class, args);
}
@Autowired 
FeingInterface feingInterface;


@GetMapping("/hi/{name}")
public String test(@PathVariable String name)
{
String h = feingInterface.test(name);
return h;
}
}

假装界面

@FeignClient(name="client22",fallback=FallBack.class)
public interface FeingInterface {
@GetMapping("/hiname/{name}")
public String test(@PathVariable("name") String name);
}

回退类

@Component
class FallBack implements FeingInterface{
@Override
public String test(String name) {
// TODO Auto-generated method stub
return "fall back methord being called";
}
}

在 rest 客户端中获取错误,但未从回退方法获取错误

"时间戳":1501950134118, "状态":500, "错误": "内部服务器错误", "exception": "java.lang.RuntimeException", "message": "com.netflix.client.ClientException: 负载均衡器没有客户端的可用服务器:client22",

为了获得回退方法消息,我传递了 client22 尤里卡 id,该 id 在尤里卡服务器中不存在。我在pom中有状态假装。有人可以调查一下吗?

回退实际上不是由 Feign 本身处理的,而是由断路器处理的。因此,您需要将 Hystrix(这是 Netflix 断路器(放在您的类路径上,并在您的 application.yml 文件中启用它,如下所示:

feign:
hystrix:
enabled: true

如果你在build.gradle或pom.xml文件中使用'cloud:spring-cloud-starter-openfeign',Hystrix应该会自动出现在你的类路径上。

相关内容

  • 没有找到相关文章

最新更新