SpringCloud简介
Spring Cloud是Spring旗下的项目之一
Spring Cloud并不是一个组件 而是许多组件的集合
其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能
协调了分布式环境中各个系统 并且为各类服务提供模板性的配置
其主要涉及的组件包括:
- Eureka:注册中心
- Zuul或Spring Cloud Gateway:服务网关
- Ribbon:负载均衡
- Feign:服务调用
- Hystrix或Resilience4j:熔断器
【在本篇中 将介绍Spring Cloud Gateway网关】
Spring Cloud Gateway网关
在多个微服务之间为了避免直接暴露地址 增强服务的安全性 需要有一个网关 用于将客户的请求转发到不同的微服务
Spring Cloud Gateway是Spring基于Spring 5.0、 Spring Boot 2.0、Project Reactor等技术开发的网关服务 基于了Filter链提供网关基本功能:安全 监控/埋点 限流等 为微服务架构提供了简单 有效且统一的API路由管理方式
Spring Cloud Gateway是替代Netflix Zuul的一套解决方案 该组件的核心是一系列的过滤器 通过这些过滤器可以将客户端发送的请求转发(也称路由)到对应的微服务
Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器 通过隐藏微服务节点的IP端口信息从而加强安全保护
其本身也是一个微服务 因此 需要注册到Eureka服务注册中心
网关的核心功能是:过滤和路由
不管是来自于PC端或移动端的请求 还是服务间的内部调用 一切对服务的请求都先经过网关 然后再由网关来实现鉴权 动态路由等操作
Gateway就是服务的统一入口 相当于一个大门
一、核心概念:
- 路由(route)
路由信息的组成:由一个ID 一个目的URL 一组断言工厂 一组Filter组成
若路由断言为真 则说明请求URL和配置路由匹配 - 断言(Predicate)
Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于Http Request中的任何信息 比如请求头和参数
简单来说 断言就是路由转发的判断条件
目前SpringCloud Gateway支持多种方式 常见如:Path、Query、Method、Header等 - 过滤器(Filter)
这里的过滤器就是一个标准的Spring WebFilter过滤器
Spring Cloud Gateway中的Filter分为两种类型的Filter 分别是Gateway Filter(当前请求的过滤器)和Global Filter(全局过滤器)
过滤器Filter将会对请求和响应进行修改处理
二、使用步骤
添加Spring Cloud Gateway的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
然后在启动类中用@EnableDiscoveryClient
注解将其注册到Eureka客户端:
@SpringBootApplication
// 开启Eureka客户端的发现功能
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class,args);
}
}
在配置文件application.yml中配置路由规则:
server:
port: 10010
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
instance:
prefer-ip-address: true
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
# 路由id 可任意写
- id: user-service-route
# 代理的服务地址(注意:是uri不是url)
# uri: http://127.0.0.1:9091
# 路由断言 匹配映射路径的条件(注意:Path的P要大写)