SpringBoot2.7 + Nacos + GateWay

  1. pom包,主要是记录版本

    <?xml version="1.0" encoding="UTF-8"?>

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.17</version>
    <relativePath/>
    </parent>
    <groupId>com.student.gateway</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <url/>
    <licenses>
    <license/>
    </licenses>
    <developers>
    <developer/>
    </developers>
    <scm>
    <connection/>
    <developerConnection/>
    <tag/>
    <url/>
    </scm>
    <properties>
    <java.version>8</java.version>
    </properties>
    <dependencies>

    复制代码
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
             <version>2021.0.5.0</version>
         </dependency>
    
         <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-gateway</artifactId>
             <version>3.1.9</version>
         </dependency>
    
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
             <version>2021.0.5.0</version>
         </dependency>
    
         <!--sentinel gateway-->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
             <version>2021.0.5.0</version>
         </dependency>
         
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
             <version>2021.0.5.0</version>
         </dependency>
    
         <!-- 202.0.5版本的cloud,需要这个注解才能负载均衡也就是 lb:student才生效 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-loadbalancer</artifactId>
             <version>3.1.4</version>
         </dependency>
    
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
    
     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
    </project>
  2. Nacos搭建,我这边是2.x版本的

  3. yaml配置

    server:
    port: 8004

    spring:
    application:
    name: gateway
    config:
    import: nacos:gateway.yaml // config的全名
    cloud:
    nacos:
    discovery:
    server-addr: 127.0.0.1:8848
    config:
    server-addr: 127.0.0.1:8848
    file-extension: yaml
    sentinel:
    transport:
    dashboard: 127.0.0.1:8005
    eager: true
    gateway:
    routes:
    - id: student
    uri: lb://student
    predicates:
    - Path=/api/redis/**
    filters:
    - StripPrefix=1 // 过滤前缀
    - Log=23 // 自定义过滤器

  4. 自定义过滤器写法

java 复制代码
package com.student.gateway.demo.filters.gateway;

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Arrays;
import java.util.List;

@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogModal> {

    public LogGatewayFilterFactory() {
        super(LogModal.class);
    }

    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("name1");
    }

    @Override
    public GatewayFilter apply(LogModal config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                System.out.println(config.getName1());
                Mono<Void> mono = chain.filter(exchange);
                return mono;
            }
        };
    }
}
java 复制代码
package com.student.gateway.demo.filters.gateway;

public class LogModal {

    private String name1;

    public String getName1() {
        return name1;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }

}
  1. 全局过滤器
java 复制代码
package com.student.gateway.demo.filters.gateway;

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Arrays;
import java.util.List;

@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogModal> {

    public LogGatewayFilterFactory() {
        super(LogModal.class);
    }

    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("name1");
    }

    @Override
    public GatewayFilter apply(LogModal config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                System.out.println(config.getName1());
                Mono<Void> mono = chain.filter(exchange);
                return mono;
            }
        };
    }
}
  1. sentinel的下载,限流和熔断
相关推荐
亚林瓜子2 小时前
AWS API Gateway配置日志
云计算·gateway·aws·log·cloudwatch
惊鸿一博9 小时前
java_网络服务相关_gateway_nacos_feign区别联系
java·开发语言·gateway
hanniuniu1320 小时前
网络安全厂商F5推出AI Gateway,化解大模型应用风险
人工智能·web安全·gateway
stormsha1 天前
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
服务器·网络·网络安全·gateway
背太阳的牧羊人1 天前
backend 服务尝试连接 qdrant 容器,但失败了,返回 502 Bad Gateway 问题排查
docker·gateway·qdrant
曼彻斯特的海边2 天前
RequestRateLimiterGatewayFilterFactory
spring cloud·gateway·限流
·云扬·2 天前
【PmHub面试篇】Gateway全局过滤器统计接口调用耗时面试要点解析
面试·职场和发展·gateway
devil_mf2 天前
gateway 网关 路由新增 (已亲测)
gateway
wmd131643067122 天前
Gateway 搭建
gateway
KubeSphere 云原生4 天前
云原生周刊:探索 Gateway API v1.3.0
云原生·gateway