【Spring Cloud Alibaba】Gateway(一)

【Spring Cloud Alibaba】Gateway(一)

  • [1. 前言](#1. 前言)
  • [2. Gateway初体验](#2. Gateway初体验)
  • [3. Gateway整合nacos](#3. Gateway整合nacos)
  • [4. Gateway内置路由断言工厂](#4. Gateway内置路由断言工厂)

1. 前言

我们微服务的架构,就是将一个大的业务/服务,拆分成多个小的业务与服务。但这样的架构,会存在着诸多的问题:

  • 每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。
  • 如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一个页面可能会涉及到数百个微服务协同工作,如果每一个微服务都分配一个域名的话,一方面客户端代码会很难维护,涉及到数百个域名,另一方面是连接数的瓶颈,想象一下你打开一个APP,通过抓包发现涉及到了数百个远程调用,这在移动端下会显得非常低效。
  • 后期如果需要对微服务进行重构的话,也会变的非常麻烦,需要客户端配合你一起进行改造,比如商品服务,随着业务变的越来越复杂,后期需要进行拆分成多个微服务,这个时候对外提供的服务也需要拆分成多个,同时需要客户端配合改造。

上面的这些问题可以借助API网关 来解决。

所谓的APl网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等等。

添加上APl网关之后,系统的架构图变成了如下所示:

2. Gateway初体验

配置文件

3. Gateway整合nacos

在上面时写死的转发路径的地址,写死之后会带来很多问题,正确的应该是从注册中心来进行获取。

  1. 引入依赖
  2. 编写yml配置文件


4. Gateway内置路由断言工厂

官方文档
https://cloud.spring.io/spring-cloud-gateway/reference/html/
https://spring.io/blog/2022/08/26/creating-a-custom-spring-cloud-gateway-filter

SpringCloud Gateway的全局异常处理 https://zhuanlan.zhihu.com/p/347028665

  • 基于Datetime类型的断言工厂
    此类型的断言根据时间做判断,主要有三个:
    • AfterRoutePredicateFactory:接收一个日期参数,判断请求日期是否晚于指定日期
    • BeforeRoutePredicateFactory:接收一个日期参数,判断请求日期是否早于指定日期
    • BetweenRoutePredicateFactory:接收两个日期参数,判断请求日期是否在指定时间段内
java 复制代码
- After=2019-12-31T23:59:59.789+08:00[Asia/Shanghai]
  • 基于远程地址的断言工厂
    • RemoteAddrRoute PredicateFactory:接收一个IP地址段,判断请求主机地址是否在地址段中
java 复制代码
- RemoteAddr=192.168.1.1/24
  • 基于Cookie的断言工厂
    • CookieRoutePredicateFactory:接收两个参数,cookie 名字和一个正则表达式。判断请求 cookie是否具有给定名称且值与正则表达式匹配。
java 复制代码
-Cookie=chocolate, ch.
  • 基于Header的断言工厂
    • HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹
java 复制代码
-Header=X-Request-Id, \d+
  • 基于Host的断言工厂
    • HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹配。
java 复制代码
-Host=**.testhost.org
  • 基于Method请求方法的断言工厂
    MethodRoutePredicateFactory:接收一个参数,判断请求型是否跟指定的类型匹配。
相关推荐
Apache IoTDB2 小时前
祝贺朱雀三号首飞成功入轨!国产时序数据库 IoTDB 助力火箭试验
数据库·时序数据库·iotdb
dragoooon342 小时前
[C++——lesson14.STL 学习——【string的使用】]
数据库·oracle
羑悻的小杀马特2 小时前
Stream消息队列+地理空间计算+HyperLogLog去重,SCAN安全遍历+RESP协议全解析,一文把它啃透!
数据库·redis·安全·缓存·空间计算·resp
ao_lang3 小时前
MySQL--多版本并发控制(MVCC)
数据库·mysql
JIAWAP3 小时前
Redis数据安全性分析之RDB详解
数据库·redis·分布式·缓存
霸王大陆3 小时前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-5
数据库·mysql·php
翔云1234563 小时前
mysql.gtid_executed 表的初始化和更新机制
数据库·mysql·adb
alphaTao3 小时前
LeetCode 每日一题 2025/12/1-2025/12/7
数据库·算法·leetcode
马克学长3 小时前
SSM特种设备全生命周期管理系统8b729(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·特种设备管理·全生命周期