【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:接收一个参数,判断请求型是否跟指定的类型匹配。
相关推荐
2301_800050991 小时前
mysql
数据库·笔记·mysql
数据皮皮侠1 小时前
2m气温数据集(1940-2024)
大数据·数据库·人工智能·制造·微信开放平台
Psycho_MrZhang2 小时前
Redis 设计思想总结
数据库·redis·缓存
曹牧3 小时前
Java:Assert.isTrue()
java·前端·数据库
程序员葫芦娃3 小时前
【Java毕设项目】基于SSM的旅游资源网站
java·开发语言·数据库·编程·课程设计·旅游·毕设
2401_865854883 小时前
怎样挑选适合业务的数据库云服务?
数据库
lkbhua莱克瓦244 小时前
基础-函数
开发语言·数据库·笔记·sql·mysql·函数
福大大架构师每日一题4 小时前
dify 1.11.2 正式发布:向量数据库、安全增强、测试优化与多语言支持全面升级
数据库·安全
码农学院4 小时前
Mysql 中的性能调优方法
数据库·mysql
UrSpecial5 小时前
MySQL索引
数据库·mysql