Gateway是什么
Gateway 网关环境搭建 cloud-gateway-gateway9527
pom
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.nyc.cloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--Eureka 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
</dependencies>
yml
#server:
# port: 9527
#spring:
# application:
# name: cloud-gateway
#eureka:
# instance:
# hostname: cloud-gateway-service
# client:
# service-url:
# register-with-eureka: true
# fetch-registry: true
# defaultZone: http://eureka7001.com:7001/eureka
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: payment_routh #路由的ID,没有固定的规则,但要求唯一,建议配合服务名
#uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2 #路由的ID,没有固定的规则,但要求唯一,建议配合服务名
#uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/** #断言,路径相匹配的进行路由
- After=2021-09-12T13:33:23.115+08:00[Asia/Shanghai]
#- Cookie=username, zzyy
discovery:
locator:
enabled: true
eureka:
instance:
hostname: cloud-gateway-service
client:
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
启动类
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class gatewayGatewayMain8527 {
public static void main(String[] args) {
SpringApplication.run(gatewayGatewayMain8527.class);
}
}
Gateway路由断言规则
官网路由断言配置规则:docs.spring.io/spring-clou…
Gateway过滤器
官网过滤器: docs.spring.io/spring-clou…
过滤器自定义
自定义过滤器需要实现如下两个接口 GlobalFilter, Ordered
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("***********come in MyLogGateWayFilter" + new Date());
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null){
log.info("***********用户名为null,非法用户┭┮﹏┭┮");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}