SpringBoot2.7 + Nacos + GateWay

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


    4.0.0

    org.springframework.boot
    spring-boot-starter-parent
    2.7.17


    com.student.gateway
    demo
    0.0.1-SNAPSHOT
    demo
    Demo project for Spring Boot














    <java.version>8</java.version>

    复制代码
         <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>
  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的下载,限流和熔断
相关推荐
Raas1001 天前
AI网关和LiteLLM区别在哪?MAI Gateway(魔芋企业级AI网关)统一治理方案深度解析
大数据·人工智能·gateway·mai gateway·企业级产品
Raas1001 天前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和OpenRouter区别?企业级能力差距一览
java·服务器·网络·人工智能·gateway·ai网关·mai gateway
Raas1002 天前
AI网关和OpenRouter区别在哪?MAI Gateway(魔芋企业级AI网关)统一治理方案深度解析
大数据·人工智能·gateway·ai网关·mai gateway
Forerror20262 天前
深入理解大模型网关是什么:MAI Gateway架构与核心价值解读
架构·gateway
Raas1003 天前
AI网关和OpenRouter区别?MAI Gateway(魔芋企业级AI网关)企业级方案对比指南
大数据·开发语言·人工智能·gateway·php·ai网关·mai gateway
Raas1003 天前
MAI Gateway(魔芋企业级AI网关)技术辨析:AI网关和大模型网关区别?选型必读
大数据·人工智能·大模型·gateway·mai gateway·企业级产品
JJJennie7773 天前
大模型网关支持DeepSeek吗?MAI Gateway功能实测与最佳实践
gateway
Casbin开源社区4 天前
一个面板管住 29 个 AI 编程 Agent:Casbin Gateway 的配置统一、协议互转、用量统计与权限管控
人工智能·golang·开源·gateway·casbin