springcloud组件gateway断言(Predicate)

Spring Cloud GatewaySpringCloud的全新子项目,该项目基于Spring5.xSpringBoot2.x技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。

概念解释:

    • Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
    • Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:PathQueryMethodHeader等。
    • Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。

开始使用

Spring Cloud Gateway目前有两种方式进行配置:

  • application.yml配置文件方式
  • 通过@Bean注解 RouteLocator 方法返回值


 

route的组成部分

  • id:路由的ID
  • uri:匹配路由的转发地址
  • predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。
  • order:路由的优先级,数字越小,优先级越高。

Spring Cloud Gateway Predicates

每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。


Path 方式匹配转发

我们在application.yml配置文件内添加对应的路由配置,如下所示

spring:
  application:
    name: spring-cloud-gateway-sample
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            # 匹配路径转发
            - Path=/api-boot-datasource-switch.html
# 端口号
server:
  port: 9090

在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html时就会被自动转发到http://blog.yuqiyu.com/api-boot-datasource-switch.html,这里要注意完全匹配Path的值时才会进行路由转发

,对应的 RouteLocator方式该怎么进行配置

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
  return builder.routes()
    .route("blog", r ->
           r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
    .build();
}

id:blog
path:/api-boot-datasource-switch.html
uri:http://blog.yuqiyu.com

Host 方式匹配转发

Spring Cloud Gateway可以根据Host主机名进行匹配转发,如果我们的接口只允许**.yuqiyu.com域名进行访问,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Host=**.yuqiyu.com

对应的 RouteLocator方式该进行配置

 @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return  builder.routes()
                .route(r -> r.host("**.yuqiyu.com")
                            .uri("http://blog.yuqiyu.com")
                            .order(1)
                            .id("blog")
                )
                .build();
    }

组合示例

相同的Predicate也可以配置多个,请求的转发是必须满足所有的Predicate后才可以进行路由转发,组合使用示例如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Method=GET
            - Host=**.yuqiyu.com
            - Path=192.168.1.56/24    

对应的 RouteLocator方式该进行配置

@Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return  builder.routes()
                .route(r -> r.host("**.yuqiyu.com")
                            .and().path("/api-boot-datasource-switch.html")
                            .and().method("GET")
                            .uri("http://blog.yuqiyu.com")
                            .order(1)
                            .id("blog")
                )
                .build();
    }

原文地址:https://www.cnblogs.com/snail90/p/11719573.html

时间: 2024-08-30 18:33:11

springcloud组件gateway断言(Predicate)的相关文章

微服务SpringCloud之GateWay路由

在前面博客学习了网关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 R

【微服务架构】SpringCloud组件和概念介绍(一)

一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯.它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩. 微服务架构需要的功能或使用场景 1:我们把整个系统根据业务拆分成几个子系统. 2:每个子系统可以部署多个应用,多个应用之间使用负载均衡. 3:需要一个服务注册中心,所有的服务都在注册中心注册

SpringCloud 组件总结,与Dubbo框架、SpringBoot框架对比分析

本文源码:GitHub·点这里 || GitEE·点这里 一.基础组件总结 1.文章阅读目录 1).基础组件 Eureka组件,服务注册与发现 Ribbon和Feign组件,实现负载均衡 Hystrix组件,实现服务熔断 Turbine组件,实现微服务集群监控 Zuul组件,实现路由网关控制 Config组件,实现配置统一管理 Zipkin组件,实现请求链路追踪 2).应用案例 基于Shard-Jdbc分库分表,数据库扩容方案 基于SpringCloud实现Shard-Jdbc的分库分表扩容 3

微服务SpringCloud之GateWay服务化和过滤器

Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所有服务. 一.服务网关注册到注册中心 这里服务和注册中心使用前面博客中的EurekaServer和EurekaClient.服务网关注册到注册中心只需引入依赖包和增加配置. 1.引入依赖包spring-cloud-starter-netflix-eureka-client <dependency>

第十三章 SpringCloud之Gateway 路由

#######gateway  路由案例####### 1.pom.xml <?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="

Spring-Cloud组件eureka

eureka是什么? eureka是Netflix的子模块之一,也是一个核心的模块,eureka里有2个组件,一个是EurekaServer(一个独立的项目) 这个是用于定位服务以实现中间层服务器的负载平衡和故障转移,另一个便是EurekaClient(我们的微服务) 它是用于与Server交互的,可以使得交互变得非常简单:只需要通过服务标识符即可拿到服务. eureka与Spring-Cloud有什么关系? Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现

SpringCloud组件:Eureka高可用集群部署

高可用集群部署 Eureka 服务注册中心.构建项目使用 idea 开发工具创建一个 SpringBoot 项目,添加 Eureka Server 依赖即可, pom.xml 配置文件如下所示: ...... <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>

springcloud 组件关系图

所有的组件服务一般都需要向注册中心(Eureka)进行服务注册:微服务的配置一般都统一由配置中心(config)进行管理. 常见的服务调用流程: 1.外部或者内部的非Spring Cloud项目都统一通过API网关(Zuul)来访问内部服务.        2.网关(Zuul)接收到请求后,从注册中心(Eureka)获取可用服务:        3.可用服务列表经由Ribbon进行均衡负载后,分发到后端的具体服务器:        4.微服务之间通过Feign进行通信处理业务.微服务的统一配置由

springcloud组件-eureka

1.eureka什么? 2.eureka单节点如何使用? 3.eureka集群配置? 4.zookeeper的cp性与eureka的ap性 5.关于eureka的自我保护机制 1.eureka是什么? springcloud中的eureka就相当于之前dubbo中的zookeeper,也是一个注册中心. 一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,并且支持集群部署. 2.eureka单节点? 以自身所写的项目来说: 首先新建一个父项目Springcloud,分别去新