Spring Cloud微服务架构学习-5

本文详细介绍了SpringCloud Gateway的原理与实践,包括网关简介、工作流程、动态路由、断路器和统一鉴权的实现。通过实例演示了如何配置动态路由、启用断路器并实现鉴权功能,帮助读者深入理解SpringCloud Gateway在微服务架构中的作用。
摘要由CSDN通过智能技术生成

一、网关简介

前言

在这里插入图片描述
  在微服务生产环境中,用户调用微服务要经过网关(API Gateway)。在单体应用中,调用服务及其简单。但在微服务中,调用服务就比较麻烦,因为不同的微服务可能用了不同的开发语言和协议。在微服务中,通过网关来处理服务的调用。
在这里插入图片描述
  网关统一向外部系统(如访问者、服务)提供REST API。在Spring Cloud中使用Zuul、Spring Cloud Gateway等作为网关来实现动态路由、监控、回退、安全等功能。

1、Spring Cloud Gateway简介

1)简介
  Spring Cloud Gateway是Spring Cloud生态系统中的网关,它是基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的,旨在为微服务提供一种简单有效的、统一的API路由管理方式,并为微服务架构提供安全、监控和弹性等功能。其目标是替代Zuul。(注意:本实验的Spring Cloud 版本较新,之前使用Zuul的方法已不适用,所以本实验采用Spring Cloud自自己的网关Spring Cloud Gateway)

2)特点
①基于Spring Framework 5、Project Reactor和Spring Boot2.0构建。
②能够匹配任何请求属性的路由。
③易于编写断言(Predicates)和过滤器(Filters)。  支持路径重写。
④支持动态路由。
⑤支持断路器。
⑥支持限流。

3)相关概念
①路由(Route)
路由是网关的基本单元。由一个ID、一个目标URI、一组断言(Predicates)和一组过滤器(Filters)来定义。
②断言(Predicates)
路由转发的判断条件,我们可以通过 Predicate 对 HTTP 请求进行匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务。
③过滤器(Filter)
使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理。

4)Spring Cloud Gateway 通过 Predicate 断言来实现 Route 路由的匹配规则。简单点说,Predicate 是路由转发的判断件,请求只有满足了 Predicate 的条件,才会被转发到指定的服务上进行处理。
在这里插入图片描述

2、Spring Cloud Gateway的工作流程

在这里插入图片描述

二、网关入门实验

基本流程:
1、创建eureka-server项目
2.、创建eureka-provider项目
3.、创建gateway项目
4.、项目测试
(这里使用之前创建的eureka-server和eureka-provider项目)

1.在父级目录下创建lesson06-gateway模块。
在这里插入图片描述

2.在Pom文件中添加网关依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
</dependencies>

在这里插入图片描述

3.添加配置文件
在这里插入图片描述
解释:
在这里插入图片描述

4.创建主包Gateway和启动类GatewayApplicaiton
(在gateway的启动类GatewayApplication中添加@EnableEurekaClient注解启动熔断功能)
在这里插入图片描述

5.启动测试
分别启动eureka-server2、eureka-provider2和gateway服务,在网页地址栏输入http://127.0.0.1:8835/port和http://127.0.0.1:8835/eureka-provider/student?id=自己学号,正常出现以下两个效果说明网关初步搭建成功。
在这里插入图片描述

在这里插入图片描述

6.路由规则测试
在application.yml中添加路由的时间断言。
在这里插入图片描述
根据实际情况修改时间后重启gateway服务,并在网页中重新访问http://127.0.0.1:8835/port
现象:
在这里插入图片描述
原因:这句话的意思是在4.4号20时之前的请求,才会被转发到http://127.0.0.1:8835/上;

现将时间改为19时,目前时间为19:10分,请求没有被转发,报错,如下:
在这里插入图片描述
在这里插入图片描述

三、动态路由实验

1.对实验一中的application.yml进行修改,修改成如下:
(在微服务很多情况下,不太可能记住所有微服务的ip地址,因此需要借助gateway的动态路由功能,动态路由只需在配置文件中进行修改)
在这里插入图片描述

2.重启gateway项目,在网页上输入http://127.0.0.1:8835/port并一直刷新,如果在7006和7007之间相互切换说明动态路由成功。
在这里插入图片描述
在这里插入图片描述

四、网关断路器实验

网关应该对与异常的服务进行熔断,避免因服务异常导致网关出现访问积压,需要为网关开启断路器。

1.在pom中添加依赖:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
</dependency>

整体:
在这里插入图片描述
其中:
在这里插入图片描述
注意:新版Spring Cloud 已把hytrix更新为了circuitbreaker

2.在application.yml中添加断路过滤器,注意缩进!!!
在这里插入图片描述

3.创建Controller包,在包内编写断路器触发时的回退方案:
(当所访问的服务出现异常,则网关会进入/fallback进行熔断降级)
在这里插入图片描述

4.测试断路器
重启gateway项目,在网页中输入http://127.0.0.1:8835/port,此时应该是正常的返回:
在这里插入图片描述

在这里插入图片描述

关闭provider其中的一个(如关闭7006),此时刷新网页,如果出现以下界面说明断路器成功:
在这里插入图片描述

在这里插入图片描述

五、网关统一鉴权实验

统一鉴权是实际开发中比较常见的,只有拥有授权的用户才能通过网关访问微服务内部的服务,统一鉴权一般在全局过滤器中实现。

1.创建Filters包并在包在创建AutoCheckFilter类实现GlobalFilter接口,具体代码如下截图:
在这里插入图片描述

2.测试鉴权
重启gateway,在网页上输入http://127.0.0.1:8835/port,如果出现以下界面,说明鉴权成功。
在这里插入图片描述

3.使用Postman带鉴权访问,首先双击Postman-win64-9.15.2-Setup.exe安装.
运行postman后添加一个访问:
在这里插入图片描述
在这里插入图片描述
注意保证7006和7007两个服务提供者都处于开启状态,如果第一次访问出现被熔断现象,可以多点send几次。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值