gateway网关
添加网关(其他模块自定义有eurekaserver,provider,consumer,monitor,parent,具体的可以看博客 “springcloud项目创建”),名称自定义,gateway-server,引入相关坐标
maven坐标
<dependencies>
<!--引入gateway 网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
配置的yml
server:
port: 80
spring:
cloud:
#网关配置
gateway:
routes: #是一个集合
# id: 唯一标识。默认是一个UUID
# uri: 转发路径
# predicates: 条件,用于请求网关路径的匹配规则
# filters:配置局部过滤器的
- id: config-provider
# 这个是配置的静态路由
# uri: http://localhost:8000/
# 配置动态路由
uri: lb://CONFIG-PROVIDER
predicates:
- Path=/goods/**
# 过滤器设置,有两种一个是局部过滤器和全局
filters:
- AddRequestParameter=username,zhangsan
- id: config-consumer
# uri: http://localhost:9000/
uri: lb://config-consumer
predicates:
- Path=/order/**
# 配置微服务的名称,我们在启动的时候可以在前面加一个名称
discovery:
locator:
enabled: true # 设置为true 请求路径前可以添加微服务名称
lower-case-service-id: true #允许大小写配置完名字之后会在后面前面可以加上名称(名称会从eureka-server里面查看)
application:
name: config-gateway-server
# 如果需要配置动态路由,那么我们就需要在这里面配置eureka的配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
gateway路由配置
配置静态路由
spring:
cloud:
#网关配置
gateway:
routes: #是一个集合
# id: 唯一标识。默认是一个UUID
# uri: 转发路径
# predicates: 条件,用于请求网关路径的匹配规则
# filters:配置局部过滤器的
- id: config-provider
# 这个是配置的静态路由
uri: http://localhost:8000/
predicates:
- Path=/goods/**
配置完以上这些这些之后我们访问的时候就可以直接通过http://localhost:80/goods/goods/1,和http://localhost:80/order/goods/1访问
配置动态路由
spring:
cloud:
#网关配置
gateway:
routes: #是一个集合
# id: 唯一标识。默认是一个UUID
# uri: 转发路径
# predicates: 条件,用于请求网关路径的匹配规则
# filters:配置局部过滤器的
- id: config-provider
# 这个是配置的动态路由
uri: lb://config-provider
predicates:
- Path=/goods/**
# 如果需要配置动态路由,那么我们就需要在这里面配置eureka的配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
配置完以上这些这些之后我们访问的时候就可以直接通过http://localhost:80/config-provider/goods/goods/1,和http://localhost:80/config-consumer/order/goods/1访问
gateway过滤器
设置过滤器需要两种,一个是局部过滤,一个是全局过滤
局部过滤
server:
port: 80
spring:
cloud:
#网关配置
gateway:
routes: #是一个集合
# id: 唯一标识。默认是一个UUID
# uri: 转发路径
# predicates: 条件,用于请求网关路径的匹配规则
# filters:配置局部过滤器的
- id: config-provider
# 这个是配置的静态路由
# uri: http://localhost:8000/
# 配置动态路由
uri: lb://CONFIG-PROVIDER
predicates:
- Path=/goods/**
# 局部过滤
filters:
- AddRequestParameter=username,zhangsan
- id: config-consumer
# uri: http://localhost:9000/
uri: lb://config-consumer
predicates:
- Path=/order/**
# 配置微服务的名称,我们在启动的时候可以在前面加一个名称
discovery:
locator:
enabled: true # 设置为true 请求路径前可以添加微服务名称
lower-case-service-id: true #允许大小写配置完名字之后会在后面前面可以加上名称(名称会从eureka-server里面查看)
application:
name: config-gateway-server
# 如果需要配置动态路由,那么我们就需要在这里面配置eureka的配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
全局过滤
创建一个filter过滤器的类,并且需要实现接口GlobalFilter, Ordered
package com.itheima.gateway.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@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;
}
}
器执行了~~~");
return chain.filter(exchange);//放行
}
/**
* 过滤器排序
* @return 数值越小 越先执行
*/
@Override
public int getOrder() {
return 0;
}
}