一、介绍
(1)网关服务
(2)功能:断言、路由、过滤
(3)能避免用户直接访问到业务主机
二、项目搭建
a、编写pom.xml(注意移除web框架,gateway中自带有)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>demo20220821</artifactId><groupId>com.wsh.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-gateway-gateway9527</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>com.wsh.springcloud</groupId><artifactId>cloud-api-common</artifactId><version>1.0-SNAPSHOT</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-test</artifactId><scope>test</scope></dependency></dependencies></project>
b、编写application.yml
server:port: 9527spring:application:name: cloud-gateway-serviceeureka:client:# 客户端设置为trueregister-with-eureka: true# 客户端设置为truefetch-registry: trueservice-url:# defaultZone: http://localhost:7001/eurekadefaultZone: http://eureka1.com:7001/eureka, http://eureka2.com:7002/eurekainstance:instance-id: gateway9527prefer-ip-address: true
c、编写启动类
package com.wsh.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/*** @ClassName PaymentMain8002* @Description: TODO* @Author wshaha* @Date 2022/8/23* @Version V1.0**/
@EnableEurekaClient
@SpringBootApplication
public class GatewayMain8002 {public static void main(String[] args) {SpringApplication.run(GatewayMain8002.class, args);}
}
d、application.yml增加路由配置
server:port: 9527spring:application:name: cloud-gateway-servicecloud:gateway:routes:- id: r1uri: http://localhost:8001predicates:- Path=/payment/test/**eureka:client:# 客户端设置为trueregister-with-eureka: true# 客户端设置为truefetch-registry: trueservice-url:# defaultZone: http://localhost:7001/eurekadefaultZone: http://eureka1.com:7001/eureka, http://eureka2.com:7002/eurekainstance:instance-id: gateway9527prefer-ip-address: true
e、运行
(4)路由开启支持负载均衡
server:port: 9527spring:application:name: cloud-gateway-servicecloud:gateway:discovery:locator:enabled: true #开启使用微服务名路由routes:- id: r1uri: lb://CLOUD-PAYMENT-SERVICEpredicates:- Path=/payment/test/**eureka:client:# 客户端设置为trueregister-with-eureka: true# 客户端设置为truefetch-registry: trueservice-url:# defaultZone: http://localhost:7001/eurekadefaultZone: http://eureka1.com:7001/eureka, http://eureka2.com:7002/eurekainstance:instance-id: gateway9527prefer-ip-address: true
三、断言配置
四、过滤
(1)
(2)自定义
package com.wsh.springcloud.config;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.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** @ClassName FiltersConfig* @Description: TODO* @Author wshaha* @Date 2023/10/14* @Version V1.0**/
@Component
public class FiltersConfig implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();queryParams.entrySet().stream().forEach(item -> {System.out.println(item.getKey() + "-" + item.getValue());});return exchange.getResponse().setComplete();//结束
// return chain.filter(exchange); //进入下一个过滤器}@Overridepublic int getOrder() {return 0;}
}