Gateway笔记

简介: 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
缓存 网络安全 Android开发
|
消息中间件 Java Kafka
Apache Hudi + Flink作业运行指南
Apache Hudi + Flink作业运行指南
460 1
|
Oracle JavaScript 关系型数据库
网站部署与上线(1)虚拟机
网站部署与上线(1)虚拟机
284 1
|
设计模式 Java 编译器
设计模式学习(五):State状态模式
在面向对象编程中,是用类表示对象的。也就是说,程序的设计者需要考虑用类来表示什么东西。类对应的东西可能存在于真实世界中,也可能不存在于真实世界中。
304 0
设计模式学习(五):State状态模式
|
安全 架构师
【人才发展】如何建立一个成功的技能提升计划
【人才发展】如何建立一个成功的技能提升计划
|
监控 Ubuntu Unix
Docker入门(三)
上一节中,我们了解到了Docker 的一些基本知识点,它的一些核心概念,Docker的使用安装等。此篇文章我们对 Docker 进行入门讲解
91 0
Docker入门(三)
|
SQL Java API
Springboot2.0从零开始搭建脚手架(三)-集成swagger2+lombok+fastjosn+MP分页
Springboot2.0从零开始搭建脚手架(三)-集成swagger2+lombok+fastjosn+MybatisPlus分页插件+sqlj执行性能监控+ 添加依赖 <!-- lombok --> <dependency> <groupId>org.
2139 0