前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud Gateway基础使用

SpringCloud Gateway基础使用

作者头像
Java学习录
发布2019-12-03 16:34:14
8450
发布2019-12-03 16:34:14
举报
文章被收录于专栏:Java学习录Java学习录

本文将会介绍SpringCloud Gateway的基本使用

首先,引入gateway的依赖

代码语言:javascript
复制
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
路由转发

gateway基本功能之一就包括路由转发

普通路由转发
代码语言:javascript
复制
spring:
  cloud:
    gateway:
      routes:
      - id: test1
        predicates:
        - Path=/api/test1/**
        uri: http://localhost:8088

所有的路由都是定义在配置routes下面的,最基本的配置就包括这几个:

  1. id:当前路由的唯一id
  2. predicates:路由谓语工厂,简单理解为执行此路由的条件判断,只有当满足条件时才认为应该使用这个路由规则。

gateway默认实现了这些谓语工厂供我们使用这些谓语工厂的功能相信大家看名字就可以看出来了。可以根据请求中的cookie、header、method、host等等去判断。而这些谓语工厂使用起来也很简单,比如我们当前是使用的PathRoutePredicateFactory:只需要使用这个类的前缀Path然后判断相应的请求路径即可。同理如果想要通过Header判断的话就使用Header=xxx即可

  1. url:这个就是当谓语工厂匹配后需要转发的url地址
微服务间路由转发

除了能够把相应的url转发到某个ip的服务上,Gateway也可以在微服务之间进行路由转发

代码语言:javascript
复制
      - id: test2
        predicates:
        - Path=/api/test2/**
        uri: lb://consumer-demo

其中consumer-demo为下级服务的spring.application.name

拦截器

gateway中的拦截器分为两种,全局拦截器和路由拦截器。故名思议,全局拦截器可以拦截所有请求:自定义一个全局拦截器可以实现GlobalFilter接口,重写filter方法即可。路由拦截器需要继承AbstractGatewayFilterFactory类,然后在路由配置的时候指定

代码语言:javascript
复制
      - id: test3
        predicates:
        - Path=/api/test3/**
        uri: lb://consumer-demo
        filters:
        - name: Test

这里的命名和谓语工厂一样,我们创建的类叫TestGatewayFilterFactory,这里使用Test即可。这样之后凡是匹配/api/test3/** 的请求都会被这个拦截器拦截

服务熔断

gateway的服务熔断是基于Hystrix的,所以使用它首先需要引入Hystrix的依赖

代码语言:javascript
复制
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

服务熔断其实是使用的一个gateway自带的路由拦截器HystrixGatewayFilterFactory实现的,想要为那个服务实现服务熔断可以直接按照如下的方式编写

代码语言:javascript
复制
      - id: test3
        predicates:
        - Path=/api/test3/**
        uri: lb://consumer-demo
        filters:
        - name: Hystrix
          args:
            name: default
            fallbackUri: forward:/defaultfallback

其中第二个name则是自定义的。而fallbackUri则是说如果请求发生熔断时应该进入的请求。就像下面这个一样:

代码语言:javascript
复制
@RestController
@Slf4j
public class DefaultHystrixController {

    @RequestMapping("/defaultfallback")
    public ResponseEntity<?> defaultfallback(){
        return new ResponseEntity("后端服务异常,进行降级", HttpStatus.INTERNAL_SERVER_ERROR);
    }

}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 路由转发
    • 普通路由转发
      • 微服务间路由转发
      • 拦截器
      • 服务熔断
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档