二、实现方式
我在spring Cloud项目中,使用了两种方式处理降级操作。
(1)使用feign组件完成降级操作,到内容提供者无法提供服务时, 消费者会调用降级操作,返回服务不可用等信息,或者返回提前准备好的静态页面。 调用的降级处理方法如下:
1@Component
2public class FeignClientFallbackFactory implements FallbackFactory<SchedualServiceHi> {
3 // 打印日志
4 private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class)
5 //降级处理方式
6 @Override
7 public SchedualServiceHi create(Throwable throwable) {
8 return new SchedualServiceHi() {
9 @Override
10 public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {
11 print.info("fallbackreason was:", throwable)
12 return "服务报错了"
13 }
14 }
15 }
16}
(2)也可以使用zuul网关,在spring Cloud自定义一个类实现ZuulFallbackProvider接口,当出现问题,无法正常调用时 ,为服务提供回退响应。
1@Component
2public class MyfaultFallback implements FallbackProvider {
3 @Override
4 public String getRoute() {
5// 表示为哪个服务提供回退,此处表示所有微服务。
6 return "*"
7 }
8
9 @Override
10 public ClientHttpResponse fallbackResponse(String route, Throwable cause) {11 return new ClientHttpResponse() {
12 @Override
13 public HttpStatus getStatusCode() throws IOException {
14// fallback返回的状态码
15 return HttpStatus.OK
16 }
17
18 @Override
19 public int getRawStatusCode() throws IOException {
20 //数字类型的状态码,本例返回的是200
21 return this.getStatusCode().value()
22 }
23
24 @Override
25 public String getStatusText() throws IOException {
26 //状态文本27 return "OK"
28 }
29
30 @Override
31 public void close() {
32
33 }
34
35 @Override
36 public InputStream getBody() throws IOException {
37// 响应体38 return new ByteArrayInputStream("用户微服务不可用,请稍候再试".getBytes())
39 }
40
41 @Override
42 public HttpHeaders getHeaders() {
43 HttpHeaders headers = new HttpHeaders()
44 headers.setContentType(MediaType.APPLICATION_JSON)
45 MediaType mt = new MediaType("application",
46 "json", Charset.forName("UTF-8"))
47 headers.setContentType(mt)
48 return headers
49 }
50 }
51 }
52}
三、效果展示
当我们访问zuul网关时,服务提供者没有开启,访问不到,就会进行降级处理,显示下面内容。
原文链接:https://zhuanlan.zhihu.com/p/69635613
1. 由于技术问题,所以在架构设计上需要考虑到稳定性,比如采用高可用解决方案,对系统进行容错处理等。2.服务熔断
服务熔断是一种服务可用性保护机制,在某些情况下,它可以避免由于服务超时而导致的系统故障。当某个服务的调用的响应时间超过了指定的阈值,或者调用次数超过被允许的最大次数,熔断器将会被触发,熔断器熔断之后,对于之后的请求将不会被处理,而是会立即返回一个错误信息,从而解决系统的拥塞,提升系统的稳定性。
3.服务降级
服务降级是当某个服务不可用或并发量过大时,使用不同的逻辑代替原有逻辑来处理请求,从而保证服务的可用性。服务降级有助于缓解对于某些资源的紧张,以提升系统的稳定性。一般情况下,服务降级的策略包括,服务降级、超时降级、异常降级、容错降级等。
说明下这是阿里云上给出的解释(由阿里云的服务中心提供服务-中科九洲)云服务器支持配置升级和降级。
1. CPU、内存、硬盘、带宽的升级,通过控制台即可在线完成,升级后不需要重新部署环境或迁移数据,IP也不会变化。CPU、内存升级前需要先停止云服务器,升级后需要重启服务器才能生效;硬盘和带宽的升级是无缝升级,无需停机和重启,用户可根据业务情况同时增加多块数据盘,带宽支持按天升级。
2. CPU、内存、带宽降级只能在续费时(选择续费变配)进行降配操作,新的配置需要在前一个服务期到期后开始生效,降配后需要在控制台重启服务器才能生效。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)