Gateway笔记

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Gateway笔记

构建项目


provider-8001

provider-8002

gateway-9527

eureka-7001


依赖,注意不要加web依赖


 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>


yml


server:
  port: 9527
spring:
  application:
    name: gateway-9527


官方路由案例


请求localhost:9527/get会转发到http://httpbin.org:80 ,并且添加了一个请求头


    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/get")
                        .filters(f -> f.addRequestHeader("Hello", "World"))
                        .uri("http://httpbin.org:80"))
                .build();
    }


1.png


按照上面的例子


  @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/get1/**")
                        .uri("http://localhost:8001"))
                .route(p -> p
                        .path("/get2/**")
                        .uri("http://localhost:8002"))
                .build();
    }


访问localhost:9527/get1/abc   匹配localhost:8001/get1/abc,


       localhost:9527/get1/abc  不匹配 localhost:8001/abc


访问localhost:9527/get2/def   匹配localhost:8001/get2/def,


      localhost:9527/get2/def   不匹配 localhost:8001/def


从eureka中心读取服务数据


 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>


配置的路由规则为 /get/** 路由到  provider/get/**


方式一:通过yml配置


server:
  port: 9527
spring:
  application:
    name: gateway-9587
  cloud:
    gateway:
      routes:
        - id: route_provider #随便起
          uri: lb://provider # uri以lb://开头(lb代表从注册中心获取服务),后面接的就是你需要转发到的服务名称
          predicates:
            - Path=/get/**
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/


方式二:通过Bean方式


@Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/get/**")
                        .uri("lb://provider")
                        .order(0)
                        .id("route_provider ")
                )
                .build();
    }


server:
  port: 9527
spring:
  application:
    name: gateway-9587
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/


@EnableEurekaClient


http://localhost:9527/get/123123   就请求到 http://provider/get/123123


PrefixPath 过滤器


在URL路径前面添加一部分的前缀


server:
  port: 9527
spring:
  cloud:
    gateway:
      routes:
        - id: route_provider123123 #随便起
          uri: lb://provider # uri以lb://开头(lb代表从注册中心获取服务),后面接的就是你需要转发到的服务名称
          predicates:
            - Path=/get/**
          filters:
            - PrefixPath=/mypath #在URL路径前面添加一部分的前缀


或者


 @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/get/**")
                        .filters(f -> f.prefixPath("/mypath"))
                        .uri("lb://provider")
                        .order(0)
                        .id("route_provider ")
                )
                .build();
    }


访问 localhost:9527/get/abc   路由到   provider/mypath/get/abc


StripPrefix 过滤器


去掉部分URL路径


server:
  port: 9527
spring:
  application:
    name: gateway-9587
  cloud:
    gateway:
      routes:
        - id: route_provider123123 #随便起
          uri: lb://provider # uri以lb://开头(lb代表从注册中心获取服务),后面接的就是你需要转发到的服务名称
          predicates:
            - Path=/abc/get/**
          filters:
            - StripPrefix=1 # 表示在转发时去掉path中的abc


或者


    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/abc/get/**")
                        .filters(f -> f.stripPrefix(1))
                        .uri("lb://provider")
                        .order(0)
                        .id("route_provider ")
                )
                .build();
    }


访问http://localhost:9527/abc/get/123 路由到  provider/get/123


- StripPrefix=2


Path=/abc/def/get/**


访问 http://localhost:9527/abc/def/get/123路由到 provider/get/123

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
SpringCloudAlibaba Java API
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(下)
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(下)
438 0
|
设计模式 监控 Java
【SpringCloud-Alibaba系列教程】10.gateway网关
简介: White带着大家以微服务架构和设计模式落地实战的方式,进行讲解和实现SpingCloud的代码开发,本节将介绍gateway网关。
2219 0
【SpringCloud-Alibaba系列教程】10.gateway网关
|
6月前
|
负载均衡 Java API
【GateWay快速入门】 —— 每天一点小知识
【GateWay快速入门】 —— 每天一点小知识
294 0
|
6月前
|
Java API 网络架构
Gateway的配置与使用
通过以上步骤,你可以配置和使用Spring Cloud Gateway来实现微服务架构中的请求路由和过滤功能。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
67 5
|
6月前
|
Java 网络架构 微服务
SpringCloud GateWay网关-学习笔记
SpringCloud GateWay网关-学习笔记
94 0
|
SpringCloudAlibaba 负载均衡 监控
十五.SpringCloudAlibaba极简入门-Gateway网关整合Nacos
这一篇文章算是补充把,之前的Spring Cloud Gateway 是以Eureka为注册中心进行整合的,见《服务网关Gateway》,现在讲一下Spring Cloud Gateway 和Nacos的整合,该文章只介绍了Gateway和Nacos整合部分,请结合《服务网关Gateway》一起看你的收获会更大
|
SpringCloudAlibaba 安全 Java
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(上)
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关
2355 0
Demo:第四章:Gateway网关
Demo:第四章:Gateway网关
125 0
|
负载均衡 监控 Java
SpringCloud学习(十六):Gateway网关的基本介绍与搭建
Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。
758 0
SpringCloud学习(十六):Gateway网关的基本介绍与搭建