Gateway路由

简介: Gateway路由

Gateway路由配置分为基于配置的静态路由设置和基于代码动态路由配置,

静态路由是指在application.yml中把路由信息配置好了,而动态路由则支持在代码中动态加载路由信息,更加灵活,我们接下来把这2种路由操作都实现一次。

2.2.1 业务说明

如上图:

  1. 用户所有请求以/order开始的请求,都路由到 hailtaxi-order服务
  2. 用户所有请求以/driver开始的请求,都路由到 hailtaxi-driver服务
  3. 用户所有请求以/pay开始的请求,都路由到 hailtaxi-pay服务
    基于配置路由设置

  4. 用户所有请求以/order开始的请求,都路由到 hailtaxi-order服务
  5. 用户所有请求以/driver开始的请求,都路由到 hailtaxi-driver服务
  6. 用户所有请求以/pay开始的请求,都路由到 hailtaxi-pay服务 配置参数说明:
routes:路由配置
  • id:唯一标识符

uri:路由地址,可以是 lb://IP:端口     也可以是   lb://${spring.application.name}

predicates:断言,是指路由条件

  • Path=/driver/**:路由条件。Predicate 接受一个输入参数,返回一个布尔值结果。这里表示匹配所有以driver开始的请求。

filters:过滤器

  • StripPrefix=1:真实路由的时候,去掉第1个路径,路径个数以/分割区分
####  基于代码路由配置
我们同样实现上面的功能,但这里基于代码方式实现。所有路由规则我们可以从数据库中读取并加载到程序中。基于代码的路由配置我们只需要创建`RouteLocator`并添加路由配置即可,代码如下:
```java
/***
* 路由配置
* @param builder
* @return
*/
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
   return builder.routes()
      .route("hailtaxi-driver", r -> r.path("/driver/**").uri("lb://hailtaxi-driver"))
      .route("hailtaxi-order", r -> r.path("/order/**").uri("lb://hailtaxi-order"))
      .route("hailtaxi-pay", r -> r.path("/pay/**").uri("lb://hailtaxi-pay"))
      .build();
}
在真实场景中,基于配置文件的方式更直观、简介,但代码的路由配置是更强大,可以实现很丰富的功能,可以把路由规则存在数据库中,每次直接从数据库中加载规则,这样的好处是可以动态刷新路由规则,通常应用于权限系统动态配置。
```yaml
spring: 
    cloud: 
        gateway:
          #路由配置
          routes:
            #唯一标识符
            - id: hailtaxi-driver
              uri: lb://hailtaxi-driver
              #路由断言
              predicates:
                - Path=/driver/**
            #唯一标识符
            - id: hailtaxi-order
              uri: lb://hailtaxi-order
              #路由断言
              predicates:
                - Path=/order/**
            #唯一标识符
            - id: hailtaxi-pay
              uri: lb://hailtaxi-pay
              #路由断言
              predicates:
                - Path=/pay/**


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
5月前
|
负载均衡 Java Nacos
Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find
Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find
133 0
|
10月前
|
负载均衡 Java API
三分钟了解Spring Cloud Gateway路由转发之自动路由
一、前言 今天有个新同学,问我为什么我们的网关服务Spring Cloud Gateway,没有配置路由就可以将请求到路由服务,说他们之前的项目的网关是将路由配置在配置文件中。指定路由类似以下写法。而在现在的项目的配置文件中未发现任何路由配置。觉得很奇怪,Spring-Cloud-Gateway 是如何将请求路由到指定的服务的呢。我让他比对一下配置文件有什么不同,他说就是只有一个spring.cloud.gateway.discovery.locator.enabled=true
2437 0
|
11月前
|
负载均衡 前端开发 Java
统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
200 0
|
11月前
|
Java 关系型数据库 MySQL
Spring Cloud Alibaba整合 Nacos注册、配置中心和Gateway网关路由
Spring Cloud Alibaba整合 Nacos注册、配置中心和Gateway网关路由
|
11月前
|
Java Spring
Spring Cloud Alibaba - 24 Gateway-路由、断言(Predicate)、过滤器(Filter)初体验
Spring Cloud Alibaba - 24 Gateway-路由、断言(Predicate)、过滤器(Filter)初体验
87 0
|
11月前
|
前端开发 安全 JavaScript
给微服务项目引入GateWay处理跨域和统一路由
给微服务项目引入GateWay处理跨域和统一路由
419 0
|
12月前
|
JSON NoSQL JavaScript
如何使用 Gateway 搭建网关服务及实现动态路由?
如何使用 Gateway 搭建网关服务及实现动态路由?
|
负载均衡 Java API
Spring Cloud Gateway整合Nacos实现服务路由及集群负载均衡
我们都知道Spring Cloud Gateway是一个基于Spring Boot、Spring WebFlux、Project Reactor构建的高性能网关,旨在提供简单、高效的API路由。
Spring Cloud Gateway整合Nacos实现服务路由及集群负载均衡
|
监控 负载均衡 Java
(十三)、GateWay路由网关
(十三)、GateWay路由网关
(十三)、GateWay路由网关
|
安全 Java API
SpringCloud Gateway路由转发规则
`Spring`在因`Netflix`开源流产事件后,在不断的更换`Netflix`相关的组件,比如:`Eureka`、`Zuul`、`Feign`、`Ribbon`等,`Zuul`的替代产品就是`SpringCloud Gateway`,这是`Spring`团队研发的网关组件,可以实现限流、安全认证、支持长连接等新特性。
SpringCloud Gateway路由转发规则