SpringCloud-Zuul的理解与应用

在这里插入图片描述
上图中服务A和服务B两个服务均为集群部署,每个服务部署三个,Open Service对外服务,外部调用方可通过Nginx负载均衡设备调用Open Service服务

问题来了!

1.如果微服务中很多独立服务都要对外提供服务,那么如何管理这些接口?项目非常大的情况下如何管理?

2.微服务中一个独立系统被拆分成多个独立服务,为确保安全统一添加权限验证代码,那工作量太大了,而且维护不便,怎么办?

Zuul网关的由来?

在这种严峻的形势下,API网关的概念出现了,就像安监站一样,所有外部请求都要经过他的调度与过滤,由它来实现请求路由,负载均衡,权限验证等功能

SpringCloud一站式微服务开发实现了 SpringCloud-Zuul,所以我们有福了,通过SpringCloud-Zuul就可以实现一套API网关服务

Zuul是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
Zuul的核心是一系列的filters, 其作用可以类比Servlet框架的Filter,或者AOP。

了解了Zuul,如何应用呢?

1.创建Zuul工程,添加依赖
	<!--导入Eureka服务的依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!--zuul网关依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-netflix-zuul</artifactId>
    </dependency>
	<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/libs-milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
2.启动类开启网关服务

在这里插入图片描述

3.添加配置文件如下

在这里插入图片描述

4.启动feign,提供者,eureka,zuul,此时注册中心如下图

在这里插入图片描述
访问网关测试,成功页面如下图
在这里插入图片描述

Zuul请求过滤

1.定义一个过滤器实现ZuulFilter,并注入到容器中

在这里插入图片描述

2.启动eureka,zuul,feign,provider测试

带token时
在这里插入图片描述
不带token时
在这里插入图片描述

路由规则

路由规则1

在这里插入图片描述

路由规则2

在这里插入图片描述

路由规则3

在这里插入图片描述

路由规则4
? 	:匹配单个字符    								/api-fn/a; /api-fn/b; /api-fn/c
* 	: 匹配任意数量字符							/api-fn/aaa;  /api-fn/bbb
**  :匹配任意数量多个字符					/api-fn/a/b/c/cc

Zuul的自我业务处理

API网关只是作为各个微服务入口,当我想在自己本身做一些业务逻辑处理,怎么找到自己的服务入口呢?

我们可以让请求到达API网关之后,转发给自己,做法如下

1.定义controller,如下

在这里插入图片描述

2.添加配置文件

在这里插入图片描述

3.访问测试

在这里插入图片描述

Zuul的异常处理

异常处理方式1

1.配置文件添加如下内容禁用掉默认错误过滤器

在这里插入图片描述

2.自定义错误过滤器

在这里插入图片描述

3.手动设置一个异常,访问测试

在这里插入图片描述在这里插入图片描述

异常处理方式1

测试前把第一种方式的痕迹清除掉(1.注释掉禁用默认错误过滤器的配置2.注释掉错误过滤器代码)

1.定义一个类实现ErrorController接口

在这里插入图片描述

2.启动服务访问测试

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mrhs_dhls/article/details/107901792