当前位置:首页 » 数据仓库 » 如何配置统一服务降级
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

如何配置统一服务降级

发布时间: 2023-01-02 15:51:25

⑴ 对比rpc框架功能1——降级

降级功能基本是rpc框架的标配了,不过对比了一些rpc框架,发现实现方式还是挺不一样的。

osp是提供了一个配置,如果配置服务为降级,那个这个服务的server端收到请求,直接返回一个降级对应的错误码,client收到这个结果后,可以根据这个错误码做处理,比如返回一些固定数据之类的。

优点:
1 降级配置方式非常灵活,可以根据请求来源配置是否降级。
2 能非常快速方便处理一些场景:比如唯品会大促的时候,把商品评论服务设置为降级,这样就可以方便的关闭掉商品评论功能了。
3 不同的调用方可以根据降级错误码来做不同的事情,非常的灵活。

缺点:
1 降级了的服务,还是会收到client的请求,对client和server还是有些压力

sofa没有看到明确的降级功能。
只是提供了自动故障剔除功能,但是这个功能只是修改server的流量权重,叫他为熔断更加贴切。

bbo提供了一个mock功能,如果server返回异常的情况下,可以用mock数据替代。

⑵ 什么是服务降级springCloud如何实现

服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。比如电商平台,在针对618、双11等高峰情形下采用部分服务不出现或者延时出现的情形。

二、实现方式

我在spring Cloud项目中,使用了两种方式处理降级操作。

(1)使用feign组件完成降级操作,到内容提供者无法提供服务时, 消费者会调用降级操作,返回服务不可用等信息,或者返回提前准备好的静态页面。 调用的降级处理方法如下:

1@Component

2public class FeignClientFallbackFactory implements FallbackFactory<SchealServiceHi> { 

3    //    打印日志

4    private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class); 

5    //降级处理方式 

6    @Override 

7    public SchealServiceHi create(Throwable throwable) {

8        return new SchealServiceHi() { 

9            @Override

10            public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {

11                print.info("fallback; reason 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    } 



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.hu.com/p/69635613