前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gateway笔记

Gateway笔记

作者头像
CBeann
发布2023-12-25 17:10:54
1520
发布2023-12-25 17:10:54
举报
文章被收录于专栏:CBeann的博客

构建项目

provider-8001

provider-8002

gateway-9527

eureka-7001

依赖,注意不要加web依赖

代码语言:javascript
复制
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

yml

代码语言:javascript
复制
server:
  port: 9527


spring:
  application:
    name: gateway-9527
官方路由案例

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

代码语言:javascript
复制
    @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();
    }

按照上面的例子

代码语言:javascript
复制
  @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中心读取服务数据
代码语言:javascript
复制
 <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配置

代码语言:javascript
复制
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方式

代码语言:javascript
复制
@Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/get/**")
                        .uri("lb://provider")
                        .order(0)
                        .id("route_provider ")
                )
                .build();
    }
代码语言:javascript
复制
server:
  port: 9527

spring:
  application:
    name: gateway-9587


eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
代码语言:javascript
复制
@EnableEurekaClient

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

PrefixPath 过滤器

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

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

或者

代码语言:javascript
复制
 @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路径

代码语言:javascript
复制
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

或者

代码语言:javascript
复制
    @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

代码语言:javascript
复制
- StripPrefix=2
代码语言:javascript
复制
Path=/abc/def/get/**

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构建项目
    • 官方路由案例
      • 从eureka中心读取服务数据
        • PrefixPath 过滤器
          • StripPrefix 过滤器
          相关产品与服务
          微服务引擎 TSE
          微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档