当使用伪装客户端进行休息调用失败时,不会调用回退方法
Fallback method is not being called when rest call is failed by using feign client
我正在尝试使用 Feign 客户端实现回退,但没有得到 success.Its 最简单的代码,请在下面找到。
主要Class
@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;
}
}
Feign 接口
@FeignClient(name="client22",fallback=FallBack.class)
public interface FeingInterface {
@GetMapping("/hiname/{name}")
public String test(@PathVariable("name") String name);
}
回退 class
@Component
class FallBack implements FeingInterface{
@Override
public String test(String name) {
// TODO Auto-generated method stub
return "fall back methord being called";
}
}
在 rest 客户端中获取错误,但不是来自回退方法
"timestamp": 1501950134118,
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.RuntimeException",
"message": "com.netflix.client.ClientException: Load balancer does not have available server for client: client22",
为了获取后备方法消息,我传递了 client22 eureka id,它在 eureka 服务器中不存在。我在 pom 中有 stater-feign。有人可以调查一下吗。
回退实际上不是由 Feign 本身处理的,而是由断路器处理的。因此,您需要将 Hystrix(它是 Netflix 断路器)放在您的类路径中,并在您的 application.yml 文件中启用它,如下所示:
feign:
hystrix:
enabled: true
如果您在 build.gradle 或 pom.xml 文件中使用 'cloud:spring-cloud-starter-openfeign',Hystrix 应该自动位于您的类路径中。
我正在尝试使用 Feign 客户端实现回退,但没有得到 success.Its 最简单的代码,请在下面找到。
主要Class
@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;
}
}
Feign 接口
@FeignClient(name="client22",fallback=FallBack.class)
public interface FeingInterface {
@GetMapping("/hiname/{name}")
public String test(@PathVariable("name") String name);
}
回退 class
@Component
class FallBack implements FeingInterface{
@Override
public String test(String name) {
// TODO Auto-generated method stub
return "fall back methord being called";
}
}
在 rest 客户端中获取错误,但不是来自回退方法
"timestamp": 1501950134118, "status": 500, "error": "Internal Server Error", "exception": "java.lang.RuntimeException", "message": "com.netflix.client.ClientException: Load balancer does not have available server for client: client22",
为了获取后备方法消息,我传递了 client22 eureka id,它在 eureka 服务器中不存在。我在 pom 中有 stater-feign。有人可以调查一下吗。
回退实际上不是由 Feign 本身处理的,而是由断路器处理的。因此,您需要将 Hystrix(它是 Netflix 断路器)放在您的类路径中,并在您的 application.yml 文件中启用它,如下所示:
feign:
hystrix:
enabled: true
如果您在 build.gradle 或 pom.xml 文件中使用 'cloud:spring-cloud-starter-openfeign',Hystrix 应该自动位于您的类路径中。