Gateway

作者: 刘小刀tina | 来源:发表于2020-03-10 23:07 被阅读0次
image.png

定义 :


功能


特点


gateway与zuul的区别


zuul的模型



gateway模型



gateway的工作流程


filter


@Component
@Slf4j
//设置一个全局的过滤器
public class MyLogGateWayFilter implements GlobalFilter, Ordered {

      //做拦截的业务逻辑处理
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        String username = exchange.getRequest().getQueryParams().getFirst("token");
        if(username == null){
            //如果为空 ,拦截请求 并提示信息
            log.info("用户未登陆,不能访问");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        //反之则放行请求
        return chain.filter(exchange);
    }
    //设置执行级别
    @Override
    public int getOrder() {
        return 0;
    }
}

springboot 整合gateway

网管模块

pom.xml
   <dependencies>

        <!--gateway的依赖包-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>


        <!--添加common 通用包-->
        <dependency>
            <artifactId>springcloud-api-common</artifactId>
            <groupId>com.tina.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--添加热部署的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--   引入eureka客户端     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

    </dependencies>



=========================================================
启动类
@SpringBootApplication////表明是一个启动类
@EnableDiscoveryClient////开启发现注册在eureka上的其他实例
@EnableEurekaClient////表明是eureka客户端
public class GatewayApplication9527 {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication9527.class,args);
    }
}
=========================================================
配置文件
server:
  port: 9527
##设置name
spring:
  application:
    name: springcloud-gateway

 # 配置gateway路由
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
        - id: routh_consumer
          uri: lb://SPRINGCLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址
          predicates:
                - Path= /payment/**  #断言 路径匹配的进行路由
#注册到eureka
eureka:
  client:
    register-with-eureka: true   #是否将自己注册到注册中心,集群必须设置为true配合ribbon
    fetch-registry: true    #是否从服务端抓取已有的注册信息
    service-url:
      defaultZone: http://springcloud-eureka-server7001:7001/eureka,http://springcloud-eureka-server7002:7002/eureka
  instance:
    instance-id: springcloud-gateway
    prefer-ip-address: true  #访问路径可以显示IP地址
    lease-renewal-interval-in-seconds: 1  #向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-expiration-duration-in-seconds: 2 #收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除

#开启eureka负载均衡策略
ribbon:
  eureka:
    enabled: true

=========================================================

相关文章

网友评论

      本文标题:Gateway

      本文链接:https://www.haomeiwen.com/subject/slggdhtx.html