SpringCloud下Gateway网关路由的使用
简介
Spring Cloud Gateway 是基于 Spring 生态系统之上构建的 API 网关,API 网关是一个服务器,是系统对外的唯一入口。API 网关封装了系统内部架构,为每个客户端提供定制的 API。
Gateway功能
性能:API 高可用,负载均衡,容错机制。
安全:权限身份认证、脱敏,流量清洗,后端签名(保证全链路可信调用),黑名单(非法调用的限制)。
日志:日志记录,一旦涉及分布式,全链路跟踪必不可少。
监控:记录请求响应数据,API 耗时分析,性能监控。
限流:流量控制,错峰流控,可以定义多种限流规则。
路由:动态路由规则
本文先聊路由的使用
Gateway路由怎么用
通过Demo演示,需要搭建四个服务,分别是Eureka,资源A,资源B,Gateway,实现通过请求网关访问到资源A和B服务
首先将资源A和B服务以及Gateway网关都注册到Eureka中

1.png
资源A服务接口
@RestController
@RequestMapping("/demo")
public class DemoA {
@GetMapping("")
public String resources(){
return "访问资源A服务成功";
}
}
资源B服务接口
@RestController
@RequestMapping("/demo")
public class DemoB {
@GetMapping("")
public String resources(){
return "访问资源B服务成功";
}
}
然后最重要的网关中的配置信息
server:
port: 8082
spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: resources-a #路由规则ID,上下文唯一
uri: lb://resources-a #路由目标的服务名(lb代表从注册中心获取服务)
predicates: #转发路径
- Path=/resources-a/**
filters:
- StripPrefix=1 #转发时去掉Path中第一个节点 配置多个路由时很重要
- id: resources-b
uri: lb://resources-b
predicates:
- Path=/resources-b/**
filters:
- StripPrefix=1
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
client:
service-url:
defaultZone: http://127.0.0.1:8081/eureka
通过配置routes属性达到转发的目的
- id为路由规则ID,可以随意配置,但是要保证唯一
- uri可以指定http地址也可以指定Eureka的服务名
- predicates是配置转发路径/**代表所有接口,可以单独指定某个接口
- filters它的作用是转发时去掉Path中第一个节点
首先测试直接访问A服务

2.png
然后测试访问网关,8082是网关的端口,网关路由最终将请求转发到了A,B服务

3.png

4.png