概念
Gateway是基于异步非阻塞模型上进行开发的,有springcloud团队开发。用来代替Zuul。
近几个月收集了收集了N份精校过的PDF版的Java八股文大全,涉及Java后端的方方面面,分享给大家。希望能帮助到大家面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
看这里: 直接获取方式点我
文档版,如下图:
内容
Route(路由)
路由是构建网关的基本模块,它由ID,目标URL,一系列的断言和过滤器组成,如果断言为true则匹配该路由
Predicate(断言)
参考的是java8的java.util.function.Predicate
开发人员可以匹配HTTP请求中的所有内容(例如请求头或者请求参数),如果请求与断言想匹配则路由
Filter(过滤)
指的是Spring框架中GatewayFilter的实例,使用过滤器,可以请求被路由器前或者之后对请求进行修改
Zuul
Zuul1基于servlet阻塞I/O的API Gateway,且进入维护
Zuul2虽然基于非阻塞I/O,但是还没有发布,且SpringCloud没有整合
优点
基于Spring Framework5, Project Reactor 和SpringBoot 2.0 进行构建
动态路由:能够匹配任何请求属性
可以对路由指定Predicate(断言) 和 Filter(过滤器)
继承Hystrix的断路器功能
集成SpringCloud服务发现功能
易于编写的Predicate(断言) 和 Filter(过滤器)
请求限流功能
支持路由重写
作用
可以不对外开放服务端,只对外开放网关
Spring Cloud Gateway工作流程
使用
1、 新建网关模型
2、 pom引入Gateway
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
3、将网关注册进eureka/Zookeeper/Consul
4、由yml网关配置。在yml中加入
spring:
cloud:
gateway:
routes:
- id: payment_routh #路由的id,没有固定规则但要求唯一,建议配合服务名
-url: http://localhost:8001 #匹配后提供服务的路由地址
-predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2 #路由的id,没有固定规则但要求唯一,建议配合服务名
-url: http://localhost:8001 #匹配后提供服务的路由地址
-predicates:
- Path=/payment/1b/** #断言,路径相匹配的进行路由
5、测试
在网关中,不需要springboot的web和actuator,否则启动报错。在pom中移除即可
–启动eureka/Zookeeper/Consul、网关、服务端
–通过网关访问服务端
6、用代码配置,创建一个配置类
@Configuration
public class GatwayConfig{
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes .route("path_route",r -> r.