SpringCloudGateway的核⼼概念
常见⽹关介绍
Ngnix+lua
使⽤nginx的反向代理和负载均衡可实现对api服务器的负载均衡及⾼可⽤,lua是⼀种脚本语⾔,可以来编写⼀些简单的逻辑, nginx⽀持lua脚本
Kong
基于Nginx+Lua开发,性能⾼,稳定,有多个可⽤的插件(限流、鉴权等等)可以开箱即⽤。 问题:只⽀持Http协议;⼆次开发,⾃由扩展困难;提供管理API,缺乏更易⽤的管控、配置⽅式。
Zuul
Netflflix开源的⽹关,功能丰富,使⽤JAVA开发,基于servlet2.5 使⽤的阻塞架构 不⽀持任何长连接,易于⼆次开发 问题:缺乏管控,⽆法动态配置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx,Spring Cloud Gateway
SpringCloud Gateway
SpringCloud Gateway Spring公司为了替换Zuul⽽开发的⽹关服务.
SpringCloud Gateway 是Spring 官⽅最新推出的⼀款基于SpringFramework 5 Project Reactor 和Springboot2 之上开发的⽹关
它与第⼀代⽹关Zuul 不同的是 gateway 是异步⾮阻塞的 (Netty Reactor + webflux 实现)zuul 是同步阻塞请求的SpringCloud Gateway 是⼯程的最前端
⽹关是微服务⼯程架构下的唯⼀⼊⼝ (客户端)
SpringCloud Gateway 提供了统⼀的路由⽅式 基于Filter 连的⽅式提供了⽹关的基本功能
SpringCloud Gateway 优缺点
优点:
性能强劲:是第⼀代⽹关Zuul的1.6倍
功能强⼤:内置了很多实⽤的功能,例如转发、监控、限流等
设计优雅,容易扩展
缺点:
其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,学习成本⾼
不能将其部署在Tomcat、Jetty等Servlet容器⾥,只能打成jar包执⾏
需要Spring Boot 2.0及以上的版本,才⽀持
SpringCloud Gateway 三⼤组成部分
Route、Predicate 、Filter
Route(路由) 是构建⽹关的基本模型 由ID URI ⼀系列的断⾔和过滤器组成
Predicate (断⾔) 可以匹配Http 请求中所有的内容(请求头 参数等等) 请求与断⾔相匹配则通过当前断⾔Filter(过滤器) 包括全局和局部过滤器 可以在请求被路由钱后对请求进⾏更改nginx和网关怎么配合使用
SpringCloud Gateway ⼯作模型
**1. 请求发送到⽹关,经由分发器将请求匹配到相应的 HandlerMapping **
2. 请求和处理器之间有⼀个映射,路由到⽹关处理程序 即Web Handler
3. 执⾏特定的请求过滤器链
**4. 最终到达代理的微服务 **
SpringCloud Gateway 代码实现
三板斧操作
1.加⼊依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <parent>
<artifactId>shop-parent</artifactId>
<groupId>com.itzhouwei</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api-gateway</artifactId>
<dependencies>
<!--gateway⽹关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--⽹关集成Sentinel -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>
</dependencies>
</project>
2.编写启动类
package com.itzhouwei.api.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayServer {
public static void main(String[] args){
SpringApplication.run(ApiGatewayServer.class,args);
}
}
3.编写配置⽂件
server:
port:9000
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled:true # 让gateway可以发现nacos中的微服务4.启动测试
5. ⾃定义路由规则
server:
port:9000
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled:true # 让gateway可以发现nacos中的微服务routes:
-id: product_route
uri: lb://product-service
predicates:
- Path=/product-serv/**
filters:
- StripPrefix=1
-id: order_route
uri: lb://order-service
predicates:
- Path=/order-serv/**
filters:
- StripPrefix=1
- Time=true
6 测试

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。