Gateway服务熔断处理
在学习或使用Zuul的时候我们可以进行服务的熔断处理,比如通过zuul去访问呢A服务,这是A服务并没有开启服务或者因其他的异常导致不发提供服务时,这是我们调用肯定会有异常,这时就必须进行服务的熔断处理!如果还不太了解Gateway的一些常用配置的可以看上一篇张SpringCloudGateway配置介绍一.创建项目文末有源代码地址哦<dependency>...
·
在学习或使用Zuul的时候我们可以进行服务的熔断处理,比如通过zuul去访问呢A服务,这是A服务并没有开启服务或者因其他的异常导致不发提供服务时,这是我们调用肯定会有异常,这时就必须进行服务的熔断处理!如果还不太了解Gateway的一些常用配置的可以看上一篇张SpringCloudGateway配置介绍
一.创建项目
文末有源代码地址哦
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
二.配置文件
server:
port: 7000
spring:
application:
name: javayh-gateway
main:
allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
profiles:
active: gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
cluster-name: javayh-nacos
config:
group: javayh
server-addr: 127.0.0.1:8848
prefix: javayh-gateway
file-extension: yml
gateway:
discovery:
locator:
enabled: true
# 服务名小写
lower-case-service-id: true
routes:
- id: api-javayh-demo
# lb代表从注册中心获取服务,且已负载均衡方式转发
uri: lb://javayh-demo
predicates:
- Path=/demo/**
# 加上StripPrefix=1,否则转发到后端服务时会带上demo前缀
filters:
- StripPrefix=1
# 服务降级 触发调用 HystrixFallbackHandler GatewayFallbackConfig
- name: Hystrix
args:
name: default
fallbackUri: 'forward:/defaultfallback'
三.定义 HystrixFallback
@Configuration
public class GatewayFallbackConfig {
@Autowired
private HystrixFallbackHandler hystrixFallbackHandler;
@Bean
public RouterFunction routerFunction() {
return RouterFunctions.route(
RequestPredicates.GET("/defaultfallback")
.and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), hystrixFallbackHandler);
}
}
@Slf4j
@Component
public class HystrixFallbackHandler implements HandlerFunction<ServerResponse> {
@Override
public Mono<ServerResponse> handle(ServerRequest serverRequest) {
serverRequest.attribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR)
.ifPresent(originalUrls -> log.error("网关执行请求:{}失败,hystrix服务降级处理", originalUrls));
return ServerResponse
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.body(BodyInserters.fromObject(ResultData.fail("HystrixFallbackHandler")));
}
}
四.验证
此时启动我的注册中心(本文使用的时nacos),启动gateway服务,访问A服务的请求路径 如: http://localhost:7000/demo/javayh/demo/gateway
这是没有A服务我们即可验证配置是否生效
根据访问的效果,服务熔断已经实现!msg内是我们的提示信息!
项目源代码,已上传到Github上 ,欢迎star; https://github.com/Dylan-haiji/javayh-platform/tree/master/javayh-route/javayh-api-gateway
本文的分享暂时就到这里,希望对您有所帮助
关注 Java有货领取更多资料
联系小编。微信:372787553,带您进群互相学习
左侧小编微信,右侧获取免费资料
- SpringCloud 自定义封装架构https://github.com/Dylan-haiji/javayh-platform
- Java 设计模式学习代码 https://github.com/Dylan-haiji/design-pattern
- SpringCloud学习代码: https://github.com/Dylan-haiji/javayh-cloud
- AlibabaCloud学习代码:https://github.com/Dylan-haiji/javayh-cloud-nacos
- SpringBoot+Mybatis 多数据源切换:https://github.com/Dylan-haiji/javayh-boot-data-soure
- Redis、Mongo、Rabbitmq、Kafka学习代码: https://github.com/Dylan-haiji/javayh-middleware
- SpringBoot+SpringSecurity实现自定义登录学习代码:https://github.com/Dylan-haiji/javayh-distribution
更多推荐
已为社区贡献2条内容
所有评论(0)