五分钟带你玩转springcloudNetflix(五)熔断与降级
【摘要】
总结来说就是如果下游服务挂了,而上游有多个服务去调用他,那么上游的服务就全部挂掉了,这样会造成雪崩效应,从而使服务大面积的失效。
在连接下游服务超时会降级走我们定义的方法。
在一段时间内失败的比例大于配置,那么熔断器会打开,即使正确调用还是会走降级方法。
Hystrix代码
需要在application中开启Hystrix ...
总结来说就是如果下游服务挂了,而上游有多个服务去调用他,那么上游的服务就全部挂掉了,这样会造成雪崩效应,从而使服务大面积的失效。
在连接下游服务超时会降级走我们定义的方法。
在一段时间内失败的比例大于配置,那么熔断器会打开,即使正确调用还是会走降级方法。
Hystrix代码
需要在application中开启Hystrix
-
@EnableFeignClients #开启feign
-
@EnableCircuitBreaker #开启Hystrix
添加配置文件
-
feign:
-
hystrix:
-
enabled: true #默认hystrix是不开启的 需要开启
-
ribbon:
-
ConnectTimeout: 5000 # 请求连接的超时时间 默认的时间为 1 秒
-
ReadTimeout: 5000 # 请求处理的超时时间
-
hystrix:
-
command:
-
default: #default全局有效,service id指定应用有效
-
execution:
-
timeout:
-
#如果enabled设置为false,则请求超时交给ribbon控制,为true,则超时作为熔断根据
-
enabled: true
-
isolation:
-
strategy: SEMAPHORE
-
thread:
-
timeoutInMilliseconds: 5000 #断路器超时时间,默认1000ms
-
circuitBreaker:
-
enabled: true
-
requestVolumeThreshold: 10 #默认20 ,熔断的阈值,如何user服务报错满足10次,熔断器就会打开,就算order之后请求正确的数据也不行。
-
sleepWindowInMilliseconds: 8000 #默认5S , 等5S之后熔断器会处于半开状态,然后下一次请求的正确和错误讲决定熔断器是否真的关闭和是否继续打开
-
errorThresholdPercentage: 0.5
新建UserClientFallBack
-
-
import org.springframework.stereotype.Component;
-
-
@Component
-
public class UserClientFallBack implements DcClient {
-
-
@Override
-
public String consumer() {
-
String error= "对不起又是我的错";
-
System.out.println(error);
-
return error;
-
}
-
-
@Override
-
public String consumer2() {
-
// TODO Auto-generated method stub
-
return null;
-
}
-
-
}
依赖于上文 只要在DcClient 加入fallback =UserClientFallBack.class 然后在调用失败之后,会直接返回定义的错误,而不会抛出异常。
-
import org.springframework.cloud.openfeign.FeignClient;
-
import org.springframework.web.bind.annotation.GetMapping;
-
-
@FeignClient(name = "eureka-client",fallback =UserClientFallBack.class )
-
public interface DcClient {
-
-
@GetMapping("/aaa/dc?dk=3002")
-
String consumer();
-
-
@GetMapping("/aaa/dc?dk=3002")
-
String consumer2();
-
}
相对于ribbon使用不同的请求类型需要不同的方法 feign 通过接口的参数就可以 如
-
#post请求 入参为user对象
-
@PostMapping("/x/x")
-
Result getDept(@RequestBody User user);
-
-
-
#get请求 入参为 string
-
@GetMapping("/x/x/{userName}")
-
Result getDept(@PathVariable String userName);
正常调用后
失败的调用获取是连接超时
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/104740653
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)