hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

微效劳SpringCloud之GateWay路由

2019-11-18杂谈搜奇网22°c
A+ A-

在前面博客进修了网关zuul,本日学下spring官方自带的网关spring cloud gateway。Zuul(1.x) 基于 Servlet,运用壅塞 API,它不支撑任何长衔接,如 WebSockets,Spring Cloud Gateway 运用非壅塞 API,支撑 WebSockets,支撑限流等新特性。

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微效劳架构供应一种简朴有用的一致的 API 路由管理体式格局。

Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目的是替换 Netflix Zuul,其不仅供应一致的路由体式格局,而且基于 Filter 链的体式格局供应了网关基础的功用,比方:平安,监控/目标,和限流。

相干观点:

Route(路由):这是网关的基础构建块。它由一个 ID,一个目的 URI,一组断言和一组过滤器定义。假如断言为真,则路由婚配。
Predicate(断言):这是一个 Java 8 的 Predicate。输入范例是一个 ServerWebExchange。我们能够运用它来婚配来自 HTTP 要求的任何内容,比方 headers 或参数。
Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们能够运用它修正要乞降相应。
事情流程:

 

客户端向 Spring Cloud Gateway 发出要求。假如 Gateway Handler Mapping 中找到与要求相婚配的路由,将其发送到 Gateway Web Handler。Handler 再经由过程指定的过滤器链来将要求发送到我们现实的效劳实行营业逻辑,然后返回。 过滤器之间用虚线离开是因为过滤器能够会在发送代办要求之前(“pre”)或以后(“post”)实行营业逻辑。

Spring Cloud Gateway 的特性:

  1. 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
  2. 动态路由
  3. Predicates 和 Filters 作用于特定路由
  4. 集成 Hystrix 断路器
  5. 集成 Spring Cloud DiscoveryClient
  6. 易于编写的 Predicates 和 Filters
  7. 限流
  8. 途径重写

Spring Cloud Gateway 网关路由有两种设置体式格局,这里发起运用yml举行设置。

  1. 在设置文件 yml 中设置
  2. 经由过程@Bean自定义 RouteLocator,在启动主类 Application 中设置

我们先完成一个简朴的路由转发的demo:

1.引入依靠

这里须要引入spring-cloud-starter-gateway。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SpringCloudGatewayDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>SpringCloudGatewayDemo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <dependencies> 
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
View Code

2.建立application.yml增添设置

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
      - id: neo_route
        uri: http://www.cnblogs.com
        predicates:
          - Path=/5ishare

各字段寄义以下:

id:我们自定义的路由 ID,坚持唯一
uri:目的效劳地点
predicates:路由前提,Predicate 吸收一个输入参数,返回一个布尔值效果。该接口包括多种默许要领来将 Predicate 组合成其他庞杂的逻辑(比方:与,或,非)。
filters:过滤划定规矩,本示例临时没用。

上面这段设置的意义是,设置了一个 id 为 neo_route 的路由划定规矩,当接见地点 http://localhost:8081/5ishare时会自动转发到地点:http://www.cnblogs.com/spring-cloud。设置完成启动项目即可在浏览器接见举行测试,当我们接见地点http://localhost:8080/5ishare 时会展现https://www.cnblogs.com/5ishare页面。

路由划定规矩

Spring Cloud Gateway 的功用很壮大,我们仅仅经由过程 Predicates 的设想就可以够看出来,前面我们只是运用了 predicates 举行了简朴的前提婚配,实在 Spring Cloud Gataway 帮我们内置了许多 Predicates 功用。

Spring Cloud Gateway 是经由过程 Spring WebFlux 的 HandlerMapping 做为底层支撑来婚配到转发路由,Spring Cloud Gateway 内置了许多 Predicates 工场,这些 Predicates 工场经由过程差别的 HTTP 要求参数来婚配,多个 Predicates 工场能够组合运用。

Predicate 引见
Predicate 来源于 Java 8,是 Java 8 中引入的一个函数,Predicate 吸收一个输入参数,返回一个布尔值效果。该接口包括多种默许要领来将 Predicate 组合成其他庞杂的逻辑(比方:与,或,非)。能够用于接口要求参数校验、推断新老数据是不是有变化须要举行更新操纵。

在 Spring Cloud Gateway 中 Spring 应用 Predicate 的特性完成了种种路由婚配划定规矩,有经由过程 Header、要求参数等差别的前提来举行作为前提婚配到对应的路由。网上有一张图总结了 Spring Cloud 内置的几种 Predicate 的完成。

 

经由过程时刻婚配
Predicate 支撑设置一个时刻,在要求举行转发的时刻,能够经由过程推断在这个时刻之前或许以后举行转发。这里运用After来设置该时刻以后转发,Before来设置该时刻之前转发,Between来设置该时刻区间端转发。在测试的过程当中最先设置After转发以后再修正别的两个Before和Between时不起作用了,须要清下浏览器缓存。

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
       - id: time_route
         uri: http://www.cnblogs.com
         predicates:
          -After=2019-11-03T10:20:06+08:00[Asia/Shanghai]
#          - Before=2019-11-03T10:55:06+08:00[Asia/Shanghai]
#          - Between=2019-11-03T11:01:06+08:00[Asia/Shanghai], 2019-11-03T11:05:06+08:00[Asia/Shanghai]

经由过程 Cookie 婚配

 Cookie Route Predicate 能够吸收两个参数,一个是 Cookie name ,一个是正则表达式,路由划定规矩会经由过程猎取对应的 Cookie name 值和正则表达式去婚配,假如婚配上就会实行路由,假如没有婚配上则不实行。以下图所示,当在要求的Cookie中增加name=cuiyw时跳转到http://www.cnblogs.com,当不增加时报404毛病。

经由过程 Header 属性婚配

Header Route Predicate 和 Cookie Route Predicate 一样,也是吸收 2 个参数,一个 header 中属性称号和一个正则表达式,这个属性值和正则表达式婚配则实行。以下图所示当设置X-Request-Id=6666时页面跳转一般,当设置为cuiyw时报404错。

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
       - id: cookie_route
         uri: http://www.cnblogs.com
         predicates:
           - Cookie=name,cuiyw
           - Header=X-Request-Id, \d+

 

 

 经由过程 Host 婚配

 Host Route Predicate 吸收一组参数,一组婚配的域名列表,这个模板是一个 ant 分开的模板,用.号作为分开符。它经由过程参数中的主机地点作为婚配划定规矩。这里没测试出来,临时略过。

经由过程要求体式格局婚配

能够经由过程是 POST、GET、PUT、DELETE 等差别的要求体式格局来举行路由,以下设置文件设置的是运用Get要求来举行路由,假如运用post则报404毛病

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
       - id: method_route
         uri: http://www.cnblogs.com
         predicates:
          - Method=GET

 

经由过程要求途径婚配

 Path Route Predicate 吸收一个婚配途径的参数来推断是不是走路由。当输入http://localhost:8081/5ishare时报404毛病,当输入http://localhost:8081/5ishare/p一般跳转。

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
       - id: method_route
         uri: http://www.cnblogs.com
         predicates:
          - Method=GET
          - Path=/5ishare/{segment}

 

经由过程要求参数婚配

 Query Route Predicate 支撑传入两个参数,一个是属性名一个为属性值,属性值能够是正则表达式。当输入http://localhost:8081/5ishare时报404毛病,当输入http://localhost:8081/5ishare?name=cuiyw时跳转一般

 

 经由过程要求 ip 地点举行婚配

Predicate 也支撑经由过程设置某个 ip 区间号段的要求才会路由,RemoteAddr Route Predicate 吸收 cidr 标记(IPv4 或 IPv6 )字符串的列表(最小大小为1),比方 192.168.0.1/16 (个中 192.168.0.1 是 IP 地点,16 是子网掩码)。这个现在没找到考证要领,临时略过。

组合运用

在上面的例子有就可以看到多个婚配组合在一起运用。比方经由过程Header属性婚配中设置了Cookie和Header。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
微效劳SpringCloud之GateWay路由

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282151.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>