【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:接收一个参数,判断请求型是否跟指定的类型匹配。
相关推荐
難釋懷2 小时前
Redis命令-Set命令
数据库·redis·缓存
Linux-palpitate2 小时前
PostgreSQL(PG)的1主2从集群部署安装
数据库·postgresql
heartbeat..3 小时前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
山峰哥3 小时前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
Coder_Boy_4 小时前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
小雪_Snow4 小时前
Windows 安装 MySQL 8.0 教程【安装包方式】
数据库·mysql
无敌的牛4 小时前
MySQL初阶
数据库·mysql
不会C++的雾5 小时前
Linux操作系统(2)
linux·数据库·mysql
java_python源码5 小时前
springboot+vue智慧小区管理系统(源码+文档+调试+基础修改+答疑)
数据库·oracle
一个天蝎座 白勺 程序猿5 小时前
KingbaseES存储管理深度解析:控制文件全生命周期管理与重做日志管理
数据库·存储管理·kingbasees·金仓数据库