@FeignClient(value = "eureka-client",configuration = FeignConfig.class,fallbackFactory = HystrixClientFactory.class)
public interface FeignHystrixInter {
//使用 Spring MVC 的注解来绑定具体该服务提供的 REST 接口
@GetMapping(value = "/HiController/hi/{name}")
String hi(@PathVariable(value = "name") String name);
}
//继承 @FeignClient 注解的 接口类
public interface UserFeignClientWithFactory extends FeignHystrixInter {
}
@Component //注入Spring 容器中
public class HystrixClientFactory implements FallbackFactory<FeignHystrixInter> {
private static final Logger logger = LoggerFactory.getLogger(HystrixClientFactory.class);
@Override
public FeignHystrixInter create(Throwable cause) {
//一进入异常就能知道什么异常
HystrixClientFactory.logger.info("fallback; exception was: {}", cause.toString());
HystrixClientFactory.logger.info("fallback; reason was: {}", cause.getMessage());
return new UserFeignClientWithFactory() {
@Override
public String hi(String name) {
return "我有两把枪,一把叫射,一把叫啊";
}
};
}
}
@SpringBootApplication
//开启服务注册于发现
@EnableDiscoveryClient
//开启 Feign Client 功能
@EnableFeignClients
public class EurekaFeignHystrixClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaFeignHystrixClientApplication.class, args);
}
}
启动 eureka-serve,eureka-client (8762,8763 两个端口),eureka-feign-hystrix-client , 浏览器访问 http://localhost:8761/
在浏览器上 输入 :http://localhost:8767/FeignHystrixController/hi/java,得到结果如下:
关掉eureka-client (8762,8763 两个端口 )服务,结果如下: