Gateway服务网关

简介: 网关是微服务架构的统一入口,实现请求路由、权限控制与限流。基于Spring Cloud Gateway可实现高性能响应式编程,通过断言和过滤器灵活控制流量,保障系统稳定。

.为什么需要网关
Gateway网关是我们服务的守门神,所有微服务的统一入口。网关的核心功能特性:
● 请求路由
● 权限控制
● 限流
其架构图如下:
权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。
限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。

什么是API网关,可参考:https://www.yuque.com/xiankanpengyouquandisitiaodongtai/yeq5ax/blo41c
在SpringCloud中网关的实现包括两种:
● gateway
● zuul
Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。(响应式变成WebFlux了解请移步至:什么是WebFlux)
2.gateway快速上手
1 创建gateway服务,引入依赖
引入依赖


org.springframework.cloud
spring-cloud-starter-gateway


com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery

2 编写启动类
package cn.itcast.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@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 # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes: # 网关路由配置

    - id: user-service # 路由id,自定义,只要唯一即可
      # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
      uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
      predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
        - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
    - id: order-service # 路由id,自定义,只要唯一即可
      uri: lb://orderservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
      predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
        - Path=/order/** # 这个是按照路径匹配,只要以/user/开头就符合要求

我们将符合Path 规则的一切请求,都代理到 uri参数指定的地址。本例中,我们将 /user/开头的请求,代理到lb://userservice,lb是负载均衡,根据服务名拉取服务列表,实现负载均衡。
4 重启测试
重启网关,访问http://localhost:10010/user/1时,符合/user/
规则,请求转发到uri:http://userservice/user/1,效果如下,说明网关路由生效:

5 网关路由流程图

当用户请求过来之后首先请求网关,网关根据自己的路由规则判断决定路由到哪个服务(依赖Nacos注册中心的服务列表信息),同时借助自身负载均衡能力分配到指定服务多个实例中的某一个实例,完成一次请求&响应。

路由配置包括:

  1. 路由id:路由的唯一标示
  2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
  3. 路由断言(predicates):判断路由的规则,
  4. 路由过滤器(filters):对请求或响应做处理
    接下来,就重点来学习路由断言和路由过滤器的详细知识。
    3.断言工厂
    我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件,例如Path=/user/是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的,像这样的断言工厂在SpringCloudGateway还有十几个:
    名称 说明 示例
    After 是某个时间点后的请求 - After=2037-01-20T17:42:47.789-07:00[America/Denver]
    Before 是某个时间点之前的请求 - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
    Between 是某两个时间点之前的请求 - Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]
    Cookie 请求必须包含某些cookie - Cookie=chocolate, ch.p
    Header 请求必须包含某些header - Header=X-Request-Id, \d+
    Host 请求必须是访问某个host(域名) - Host=.somehost.org,.anotherhost.org
    Method 请求方式必须是指定方式 - Method=GET,POST
    Path 请求路径必须符合指定规则 - Path=/red/{segment},/blue/

    Query 请求参数必须包含指定参数 - Query=name, Jack或者- Query=name
    RemoteAddr 请求者的ip必须是指定范围 - RemoteAddr=192.168.1.1/24
    Weight 权重处理
    虽然断言规则有很多,但基本使用的都是Path这种路由工程,大家也重点关注此即可。
    4.过滤器工厂
    GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

1 过滤器种类
Spring提供了31种不同的路由过滤器工厂,具

相关文章
|
监控 Java API
一万了解 Gateway 知识点
一万了解 Gateway 知识点
543 0
|
9月前
|
存储 算法 Java
深入理解JVM:内存管理与垃圾回收机制探索
JVM是Java程序的运行核心,实现跨平台、自动内存管理与高效执行。其架构包括类加载、运行时数据区、执行引擎等模块。内存模型历经演变,JDK 8起以元空间替代永久代,优化GC性能。JVM通过分代回收机制,结合标记清除、复制、整理等算法,管理对象生命周期,提升系统稳定性与性能。
|
8月前
|
安全 前端开发 Java
Java类加载机制——双亲委派与自定义类加载器
Java类加载机制是JVM加载.class文件并完成验证、准备、解析、初始化的过程,支持跨平台与动态扩展。通过类加载器实现双亲委派模型,确保类的唯一性与安全性,同时可通过自定义ClassLoader打破委派链,实现类隔离,广泛应用于Web容器与模块化系统。
342 3
|
8月前
|
运维 监控 Java
微服务服务注册与发现
本课程以黑马商城项目为案例,深入讲解单体架构与微服务架构的优缺点,掌握分布式、云原生架构核心概念。通过实践搭建项目环境,学习服务拆分、Nacos注册发现、RestTemplate与OpenFeign远程调用,提升微服务开发与架构设计能力。(238字)
|
8月前
|
安全 Java 微服务
SpringBoot使用汇总
本课程全面讲解Spring Boot 2.0.3核心知识,涵盖配置、MVC、持久化、安全认证、缓存等实用技术,助你快速掌握微服务开发。通过真实项目场景与案例,零基础也能轻松上手,适合Java开发者及微服务学习者。
|
8月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务统一解决方案,弥补了各技术分散的不足。它具备约定优于配置、组件丰富、开箱即用等特点,支持云原生架构。版本以地铁站命名,避免与子项目冲突。随着Netflix组件停更,Spring Cloud Alibaba凭借Nacos、Sentinel、Seata等成熟组件成为主流选择,经阿里验证,功能完备,生态强大,是当前微服务落地的优选技术栈。
|
8月前
|
存储 Java Linux
Nacos注册中心
Nacos安装部署指南:下载稳定版压缩包,通过startup脚本启动,支持Windows/Linux/Mac;配置application.properties避免端口冲突。整合Spring Cloud Alibaba后,替换Eureka为Nacos注册中心,修改配置文件指向Nacos地址并设置集群名,实现服务自动注册与发现。支持多集群部署,提升调用效率与容灾能力。(238字)
|
8月前
|
安全 Java 应用服务中间件
认识SpringSecurity
Spring Security 是基于过滤器链的鉴权框架,核心功能包括认证(支持表单、OAuth2、JWT等)、鉴权(URL、方法级、RBAC等)及防御CSRF等攻击。通过FilterChainProxy与DelegatingFilterProxy集成到Web容器,实现灵活的安全控制与异常处理。
|
Java API 调度
JUC系列-《ReentrantLock深度解析:解锁JUC并发编程的密钥》
ReentrantLock是Java中比synchronized更灵活的同步工具,支持可中断、可超时、公平锁及多条件变量控制。本文深入解析其核心特性、Condition精准调度、底层AQS原理,并对比synchronized,助你掌握高并发编程的最佳实践。
JUC系列-《ReentrantLock深度解析:解锁JUC并发编程的密钥》

热门文章

最新文章