Gateway网关
微服务越来越多,网关可以统筹全局,可以指挥所有的微服务
解决问题:
1.统一入口:为全部微服务提供唯一入口点,网关起到外部和内部隔离,保障了后台服务的安全性。
2.鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。
3.动态路由:动态的将请求路由到不同的后端集群中。
4.减少客户端与服务的耦合,服务可以独立发展,通过网关层来做映射。
目前网关解决方案:Nginx+Lua,NetflixZuul,Spring Cloud Gateway
网关快速入门
1 搭建网关模块
----------------------------------
2 引入依赖:starter-gateway
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
------------------------------------
3 编写启动类
------------------------------------
4 编写配置文件
server:
port: 80
spring:
application:
name: api-server-dateway #当前应用名称
cloud:
#网关配置
gateway:
#路由配置:转发规则
routes: # 集合
# id: 唯一标识。默认是一个UUID
# uri: 转发路径
# predicates: 条件,用于请求网关路径的匹配规则
# filters:配置局部过滤器的
- id: gateway-provider
uri: http://localhost:8000/ #静态路由
predicates:
- Path=/goods/**
filters: username,whh
- id: gateway-consumer
uri: lb://gateway-consumer/ #动态路由
predicates:
- Path=/order/**
# 微服务名称配置
discovery:
locator:
enabled: true #设置true 请求路径前可以添加微服务名称
lower-case-service-id: true # 允许为小写
eureka:
client:
service-url: http://localhost:8761/eureka # eureka注册地址
------------------------------------
5 启动测试
GatewayFilter 局部过滤器:是针对单个路由的过滤器。只需要在配置文件配置局部过滤器名称,并为其指定对应的值,就可以让其生效。
GlobalFilter 全局过滤器:不需要在配置文件中配置,系统初始化时加载,并作用在每个路由上。
自定义全局过滤器步骤:
1、定义类实现 GlobalFilter 和 Ordered接口
2、复写方法
3、完成逻辑处理
@Component
public class MyFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("自定义全局过滤器执行了~~~");
return chain.filter(exchange);//放行
}
/**
* 过滤器排序
* @return 数值越小 越先执行
*/
@Override
public int getOrder() {
return 0;
}
}