Gateway的简单使用

简介: Gateway的简单使用

构建项目


provider-8001

provider-8002

gateway-9527

eureka-7001


依赖,注意不要加web依赖


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


application.yml


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


路由规则小案例


静态路由


配置yml方式


server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
      - id: payment_routh #没有固定的规则但是要求唯一,建议配合服务名
        uri: http://localhost:8001 #匹配后提供的路由地址
        predicates:
        - Path=/payment/get/**  #断言,路径相匹配的进行路由


此处设置的路由规则是 http://localhost:9527/payment/get/**   会路由到  http://localhost:8001/payment/get/**


而不是 http://localhost:9527/payment/get/*  路由到 http://localhost:8001/*

此处我修改上面的代码把


uri: http://localhost:8001 #匹配后提供的路由地址


修改为


uri: http://localhost:8001/abc #匹配后提供的路由地址


访问 http://localhost:9527/payment/get/1 仍然能 路由到 http://localhost:8001/payment/get/1

说明后面的/abc配置没有作用,而且官网里的小案例就是 只有 ipd地址或者 服务名称


编码方式


    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
        routes.route("payment_routh"
                , r->r.path("/payment/get/**").uri("http://localhost:8001"))
                .build();
        return routes.build();
    }


等价于


spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
      - id: payment_routh #没有固定的规则但是要求唯一,建议配合服务名
        uri: http://localhost:8001 #匹配后提供的路由地址
        predicates:
        - Path=/payment/get/**  #断言,路径相匹配的进行路由


动态路由


以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>


修改启动类


@EnableEurekaClient


修改yml配置文件


7.png


server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true  #开启注册中心路由功能
      routes:
      - id: payment_routh #没有固定的规则但是要求唯一,建议配合服务名
        uri: lb://CLOUD-PROVIDER-PAYMENT #此处如果有问题,请注意依赖spring-cloud-starter-netflix-eureka-client依赖不能错
        #uri: http://localhost:8001 #匹配后提供的路由地址
        predicates:
        - Path=/payment/get/**  #断言,路径相匹配的进行路由


Route Predicate路由断言


就是下图中的箭头处下面的规则


8.png


下面是官网提供的配置规则


Spring Cloud Gateway


GateWay的Filter


官网地址


Spring Cloud Gateway

Spring Cloud Gateway


下面是复制官网上的一段代码,添加请求头  key=X-request-red,value=biue


spring:
  cloud:
    gateway:
      routes:
      - id: add_request_header_route
        uri: https://example.org
        filters:
        - AddRequestHeader=X-Request-red, blue


自定义过滤器


@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("***********come in MyLogGateWayFilter: "+new Date());
        String uname = exchange.getRequest().getQueryParams().getFirst("uname");//每次进来后判断带不带uname这个key
        if(uname == null){
            log.info("*********用户名为null ,非法用户,o(╥﹏╥)o");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);    //uname为null非法用户
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }
    @Override
    public int getOrder() {
        return 0;
    }
}
目录
相关文章
|
SpringCloudAlibaba Java API
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(下)
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(下)
447 0
|
8月前
|
负载均衡 Java API
【GateWay快速入门】 —— 每天一点小知识
【GateWay快速入门】 —— 每天一点小知识
361 0
|
8月前
|
负载均衡 Java API
SpringCloud之gateway基本使用解读
SpringCloud之gateway基本使用解读
|
8月前
|
Java Spring
GateWay实现原理
GateWay实现原理
|
JSON Cloud Native Go
gRPC-GateWay Swagger 实战
gRPC-GateWay Swagger 实战
103 1
|
SpringCloudAlibaba 安全 Java
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关(上)
SpringCloudAliBaba篇之gateway:手把手教你搭建服务网关
2484 0
|
负载均衡 算法 前端开发
SpringCloud之Gateway组件简介
网关类似于海关或者大门,出入都需要经过这个网关。别人不经过这个网关,永远也看不到里面的东西。可以在网关进行条件过滤,比如大门只有对应的钥匙才能入内。网关和大门一样,永远暴露在最外面
184 0
|
Dubbo 安全 Java
Dubbo想要个网关怎么办?试试整合Spring Cloud Gateway
在以Dubbo框架体系来构建的微服务架构下想要增加API网关,如果不想自研开发的情况下在目前的开源社区中几乎没有找到支持dubbo协议的主流网关,但是Spring Cloud体系下却有两个非常热门的开源API网关可以选择;本文主要介绍如何通过Nacos整合Spring Cloud Gateway与Dubbo服务。
3344 0
Dubbo想要个网关怎么办?试试整合Spring Cloud Gateway
Demo:第四章:Gateway网关
Demo:第四章:Gateway网关
131 0
|
负载均衡 Java 应用服务中间件
【JavaP6大纲】SpringCould篇:网关Zuul、Gateway、nginx的区别
【JavaP6大纲】SpringCould篇:网关Zuul、Gateway、nginx的区别
211 0