SpringCloud H版 GateWay 网关服务降级
Posted 小毕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud H版 GateWay 网关服务降级相关的知识,希望对你有一定的参考价值。
一、GateWay 网关服务降级
在上篇文章中我们讲到了GateWay 网关的基本使用和路由的转发,今天一起学习下,gateway的服务降级。
上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122023067
但是可能会发现一个问题,如果转发后的地址无法响应,则会返回错误,比如停掉上篇文章中的服务提供者,在浏览器请求地址http://localhost/provider1/getData
,则会:
这就给人一种不好的感觉了,在每个具体服务中,我们都可以进行服务降级,在网关中就不行吗?答案肯定是可以的,毕竟这是Spring cloud自家开发的,肯定做了和自家服务保护框架hystrix的适配工作,下面我们一起来实现下吧。
二、GateWay 整合服务降级
修改pom文件,添加hystrix的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在启动类中开启hystrix
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class GateWayApplication
public static void main(String[] args)
SpringApplication.run(GateWayApplication.class, args);
在修改配制文件前,先写一个统一的服务降级接口,一旦某个服务出现错误,就转调用此接口:
@RestController
public class FallbackController
@GetMapping("/fallbackA")
public ResponseTemplate fallbackA()
return ResFailTemplate.builder().message("GateWay 服务降级处理!").build();
配制文件中添加 hystrix 的配制:
hystrix:
command:
default:
execution:
timeout:
enabled: true #是否应该有超时
isolation: # 隔离策略
strategy: THREAD
thread:
timeoutInMilliseconds: 2000 #服务调用超时时间,THREAD隔离模式下是请求超时是会取消调用线程从而立即返回的,SEMAPHORE模式下会等待响应回来再判断是否超时。
interruptOnTimeout: true #执行超时的时候,是否需要将他中断
interruptOnCancel: true #是否在方法执行被取消时中断方法
主要配制了隔离策略为线程池和超时时间为2秒,再修改gateway的配制:
- id: provider2
uri: http://127.0.0.1:8091
predicates:
- Path=/provider1/**
filters:
- StripPrefix=1 # 去除请求地址中的前缀
- name: Hystrix
args:
name: fallbackCmdA
fallbackUri: forward:/fallbackA
然后重启网关,重新访问接口:http://localhost/provider1/getData
接口已经被降级处理了。
关于更多hystrix的讲解,可以参考下面两篇我的博客:
https://blog.csdn.net/qq_43692950/article/details/121996806
https://blog.csdn.net/qq_43692950/article/details/121998205
喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!
以上是关于SpringCloud H版 GateWay 网关服务降级的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud H版 GateWay 过滤器讲解 及 使用Guava 统一限流处理。
SpringCloud(Greenwich版)新一代API网关Gateway
3W字吃透:微服务网关SpringCloud gateway底层原理和实操