一、SpringCloud Gateway简介
Gateway网关是我们服务的守门神,所有前端访问微服务的统一入口,旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
核心功能特性:
- 请求路由
- 集成 Hystrix 断路器
- 权限控制
- 限流
加入网关后的服务结构:
路由:gateway加入后,一切请求都必须先经过gateway,因此gateway就必须根据某种规则,把请求转发到某个微服务,这个过程叫做路由。
- 路由基本组成
id:路由的唯一标识
uri:路由的目的地
predicates:断言:是否满足此路由的条件
filters:过滤器
权限控制:请求经过路由时,我们可以判断请求者是否有请求资格,如果没有则进行拦截。
限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。
网关的实质:网关中的每一个功能都是由过滤器链完成的。
gateway网关的优点:
- 安全 ,只有网关系统对外进行暴露,微服务可以隐藏在内网,通过防火墙保护。
- 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
- 易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
- 减少了客户端与各个微服务之间的交互次数
- 易于统一授权。
二、gateway快速入门
(1)、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
(2)、编写启动类
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
3、编写配置(application.yml文件中)
server:
port: 10010 #服务端口
spring:
application:
name: gateway-server #指定服务名
映射规则:
server:
port: 10010 #服务端口
spring:
application:
name: gateway-server #指定服务名
cloud:
gateway:
routes:
- id: user-service # 当前路由的唯一标识
uri: http://127.0.0.1:8081 # 路由的目标微服务地址
predicates: # 断言 判断 前端浏览器发送url和当前path是否匹配
- Path=/user/** # 按照路径匹配的规则
# - id: order-service # 当前路由的唯一标识
# uri: http://127.0.0.1:9081 # 路由的目标微服务地址
# predicates: # 断言 判断 前端浏览器发送url和当前path是否匹配
# - Path=/order/** # 按照路径匹配的规则
三、面向服务的路由
(1)、添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
(2)、添加Eureka配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
(3)、修改映射配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
spring:
cloud:
gateway:
routes:
# id:路由的唯一标识
- id: user-service-route
# uri:如果满足路由规则要跳转的路径
uri: lb://user-service # lb:(load balance)负载均衡(默认轮询) user-service:服务的名称
# predicates:断言 是否满足路由的条件
predicates:
- Path=/user