概述
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,用于取代Zuul网关。
基于Netty,WebFlux . 由于不是Sevlet容器,不能打成war包, 只支持SpringBoot2.X,不支持1.x
基于Netty,WebFlux . 由于不是Sevlet容器,不能打成war包, 只支持SpringBoot2.X,不支持1.x
基于Netty,WebFlux . 由于不是Sevlet容器,不能打成war包, 只支持SpringBoot2.X,不支持1.x
重要的事情说三遍。
网关的作用
网关常见的功能有路由转发、权限校验、限流控制等作用
官网
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
来个栗子
创建一个gateWay的工程 artisan-cloud-gateway
step1 搞依赖
<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-alibaba-nacos-discovery</artifactId> </dependency> <!--actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
step2 搞注解 (gateway没有注解)
写个服务发现的注解(高版本也可以不写),gateway没有注解
step3 搞配置
server: port: 8888 #gateway注册到nacos上的服务名称 spring: application: name: api-gateway cloud: #nacos nacos: discovery: server-addr: 1.117.97.88:8848 gateway: #gateway discovery: locator: enabled: false # 是否可以通过微服务的名称直接调用接口 【默认值false, 建议保持false】 enabled: true # 是否开启服务网关 management: endpoints: web: exposure: include: '*' endpoint: health: show-details: always # 打开端点详情
其他工程 & 验证
分别启动
artisan-cloud-gateway 【8888】
artisan-cloud-gateway-order【8080】
artisan-cloud-gateway-product【8084】
再确认下【artisan-cloud-gateway】的配置文件
通过网关地址 端口为8888访问订单微服务
我们调整下参数,开启拉取nacos配置
重启应用,重新访问
如果我们 禁用网关呢?
重启应用,重新访问
参数解读
spring.cloud.gateway.discovery.locator.enabled
启网关拉取nacos的服务 即是否可以通过微服务的名称直接调用接口 【默认值false, 建议保持false】
开启了,容易暴漏后端服务
spring.cloud.gateway.enabled
网关的开启与关闭 , 需要开启
转发过程
我们简单看下 spring.cloud.gateway.discovery.locator.enabled
设置为true
后, 网关是如何处理这些请求的 ,后面再解读源码