SpringcloudAlibaba-GateWay
简介
Spring Cloud Gateway 基于Spring Boot 2.x、Spring WebFlux和Project Reactor,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。
SpringCloud GateWay使用的是Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架。
特点:
- 性能强劲:是Zuul的1.6倍
- 功能强大:内置了很多实用的功能,例如转发、监控、限流等
- 设计优雅,容易扩展
官网: https://spring.io/projects/spring-cloud-gateway.
GateWay核心的流程就是:路由转发+执行过滤器链.
代码
- 父项目添加依赖
复制 <spring.cloud-version>Hoxton.SR5</spring.cloud-version>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- GateWay添加依赖
复制 <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
- GateWay的YML配置
复制server:
port: 9012
spring:
application:
name: nacos-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #Nacos服务注册中心地址
gateway:
discovery:
locator:
enabled: true #开启注册中心路由功能
routes:
- id: nacos-config
uri: lb://nacos-config
predicates:
- Path=/getGateWay/**
- After=2022-01-07T14:39:10.529+08:00[Asia/Shanghai] # 在这个时间之后的请求都能通
- GateWay添加过滤器
复制package com.yxkj.nacosspringcloudgatewayexample.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Date;
/**
* @program:FoundationStudy
* @Author: zhuyang
* @Date: 2022/02/13/18:39
* @Description:
*/
@Component
@Slf4j
public class MyFilter implements Ordered, GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String username = exchange.getRequest().getQueryParams().getFirst("username");
log.info("*************MyFilter:"+new Date());
if("zs".equals(username)){
log.info("**********用户名为zs,非法用户,请求被拒绝!");
//如果username为空,返回状态码为406,不可接受的请求
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
//进入下一个过滤器
return chain.filter(exchange);
}
/**
* @Description: 加载过滤器的顺序
* @Author: zhuyang
* @Date: 2022-02-13
* @Param: 整数数字越小优先级越高
* @return:
**/
@Override
public int getOrder() {
return 0;
}
}
- 子项目分别添加请求接口
复制 @GetMapping("/getGateWay")
public String getGateWay(String username){
return "GateWay进行访问,传入username:"+username;
}
进行测试
http://127.0.0.1:9012/getGateWay?username=zss
:正常请求
http://127.0.0.1:9012/getGateWay?username=zs
:错误请求,被过滤器进行过滤
Gitee地址
XFS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)