再启动eureka服务器后,把provider和consumer注册到上面
导入包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
这里为了测试 就再provider里面故意制造错误
@Override
public String isAlive() {
try {
System.out.println("准备睡");
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int i = count.getAndIncrement();
int j=1/0;
System.out.println("====好的第:" + i + "次调用");
return "port:" + port;
consumer调用 这边可以指定fallbackFactory或者fallback 但是异常捕捉只有fallbackFactory有
@FeignClient(name = "user-provider",fallbackFactory = WebError.class)
public interface ConsumerApi {
@RequestMapping(value = "/user/isAlive",method = RequestMethod.GET)
public String alive();
来写这个fallbackFactory类
必须继承这个类 如果可以处理降级或者熔断
import java.util.Map;
@Component
public class WebError implements FallbackFactory<ConsumerApi> {
@Override
public ConsumerApi create(Throwable cause) {
return new ConsumerApi() {
@Override
public String alive() {
System.out.println(cause);
if (cause instanceof HttpServerErrorException.InternalServerError){
return "远程服务报错";
}
else if(cause instanceof RuntimeException){
return "运行时异常";
}
else {
return "都算不上";
}
}
加上注解后yml配置
@EnableFeignClients
@SpringBootApplication
public class UserConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(UserConsumerApplication.class, args);
}
}
feign:
circuitbreaker:
enabled: true