spring-cloud(5)【zuul】

1. 概述

    API网关是 一 个更为智能的应用服务器, 它的定义类似于面向对象设计模式中的Facade模式, 它的存在就像是整个微服务架构系统的门面 一 样,所有的外部客户端访问都需要经过它来进行调度和过滤。它除了要实现请求路由负载均衡校验过滤等功能之外, 还需要更多能力, 比如与服务治理框架的结合、 请求转发时的熔断机制、 服务的聚合等 一 系列高级功能。

    SpringCloud Zuul通过与SpringCloudEureka进行整合, 将自身注册为Eureka服务治理下的应用, 同时从Eureka中获得了所有其他微服务的实例信息。 这样的设计非常巧妙地将服务治理体系中维护的实例信息利用起来, 使得将维护服务实例的工作交给了服务治理框架自动完成, 不再需要人工介入。

    zuul的使用重点基本在于路由配置和过滤器。

2. 基本使用

1. 引入配置

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
		</dependency>

2. 添加启动类

    启动类加上注解@EnableZuulProxy,如果需要zuul自动实现容错,还需要加上@EnableHystrix

3. 配置文件

    设置端口,应用名称,eureka地址等

4. 配置路由(可选)

    默认情况下,zuul与eureka联合使用,zuul会自动读取eureka中注册的服务,并且自动代理。自定义的路由配置比如去除某个服务,添加前缀,自定义路由等,暂且不说。

5. 添加过滤器

    编写类继承ZuulFilter,并配置到spring

6. 启动eureka,业务服务(service-A),zuul,

    如果zuul端口为8883,则访问http://localhost:8883/service-A/api就可以看到响应的结果

3. 对Hystrix和Ribbon的支持

    1. 添加容错

    编写类实现ZuulFallbackProvider接口,getRoute方法返回服务的名称。ClientHttpResponse的getBody方法可以给前台返回错误信息。需要注意的是,这个容错只有在服务掉线或者超时才会触发。

4. 过滤器详解

    zuul共有四种过滤器,分别是pre,route,post和error过滤器。具体如下图所示:


    首先它会进入第 一 个阶段pre, 在这里它会被pre类型的过滤器进行处理, 该类型过滤器的主要目的是在进行请求路由之前做 一 些前置加工, 比如请求的校验等。 

    在完成了pre类型的过滤器处理之后, 请求进入第二个阶段rou巨ng, 也就是之前说的路由请求转发阶段, 请求将会被routing类型过滤器处理。这里的具体处理 内容就是将外部请求转发到具体服务实例上去的过程, 当服务实例将请求结果都返回之后, routing 阶段完成, 请求进入第三个阶段post。 

    此时请求将会被post类型的过滤器处理,这些过滤器在处理的时候不仅可以获取到请求信息, 还能获取到服务实例的返回信息, 所以在 post类型的过滤器 中, 我们可以对处理结果进行一 些加工或转换等内容。 

    另外, 还有 一 个特殊的阶段error, 该阶段只有在上述三个阶段中发生异常的时候才会触发,但是它的最后流向还是 po江类型的过滤器,因为它需要通过post过滤器将最终结果返回给请求客户端

    

    过滤器的异常处理,主要是error过滤器,在此先不详细描述

5. 禁用过滤器

zuul.AccessFilter.pre.disable = true

6. 动态路由

    通过配置中心实现

7. 动态过滤器

    通过动态语言groovy实现


    



猜你喜欢

转载自blog.csdn.net/wangzhanzheng/article/details/80567752