SpringCloud中网关实现笔记
SpringCloudGateway:基于Spring的WebFlux技术,完全支持响应式编程,吞吐能力更强
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,用于构建基于 Spring 框架的 API 网关服务。它基于 Spring 5,采用了异步非阻塞方式,极大地提高了性能。Spring Cloud Gateway 提供了强大的路由功能,支持动态路由、断言路由、过滤器链等功能,同时集成了 Spring Cloud DiscoveryClient、Spring Cloud LoadBalancer 等组件,可以与注册中心和服务发现组件无缝集成
1.创建网关微服务
创建一个新的module,命名为xx-gateway,作为网关微服务
2.引入依赖
代码如下:
<!--网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--nacos discovery--><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-loadbalancer</artifactId></dependency>
3.启动类
代码如下:
@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}
4.配置路由
代码如下:
server:port: 8080
spring:application:name: gatewaycloud:nacos:server-addr: 192.168.1.1:8848gateway:routes:- id: item # 路由规则id,自定义,唯一uri: lb://item-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务- Path=/items/**,/search/** # 这里是以请求路径作为判断规则- id: carturi: lb://cart-servicepredicates:- Path=/carts/**- id: useruri: lb://user-servicepredicates:- Path=/users/**,/addresses/**- id: tradeuri: lb://trade-servicepredicates:- Path=/orders/**- id: payuri: lb://pay-servicepredicates:- Path=/pay-orders/**
5.路由断言
动态路由:支持动态路由配置,可以根据需要动态地将请求路由到不同的目标地址。
断言路由:可以根据请求的路径、参数等信息进行断言匹配,从而决定是否路由到目标地址。
过滤器链:可以定义一系列过滤器对请求和响应进行处理,例如鉴权、日志、限流等操作。
集成性:Spring Cloud Gateway 可以与 Spring Cloud 中的其他组件(如 Eureka、Consul、Ribbon 等)无缝集成,提供完整的微服务架构解决方案。
性能优化:Spring Cloud Gateway 采用了异步非阻塞的方式处理请求,性能比传统的基于 Servlet 的网关更高。
使用 Spring Cloud Gateway 可以轻松构建和管理 API 网关服务,实现统一的路由、过滤和处理逻辑,为微服务架构提供更好的可扩展性和灵活性。