暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

(五)spring-cloud简单入门之(Spring Cloud Zuul)

于果1023 2018-06-06
289

spring cloud zuul是什么呢?


zuul是一种API的网关服务


API网关服务又是什么呢?


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


接着,我们来使用下API网关服务


首先,需要做一些准备服务,构建起最基本的API网关服务,可以沿用之前搭建好的service-ribbon项目


一、再创建一个基础的Spring Boot工程,命名为api-gateway,并在pom.xml中引入spring-cloud-starter-zuul依赖,如下:

其中的spring-cloud-starter-zuul依赖包含了以下的这些依赖:

  1. spring-cloud-starter-hystrix:该依赖用来在网关服务中实现对微服务转发时候的保护机制,通过线程隔离和断路器。防止微服务的故障引发API网关资源无法释放,从而影响其他应用的对外服务。

  2. spring-cloud-starter-ribbon:该依赖用来实现在网关服务进行路由转发时候的客户端负载均衡以及请求重试。

  3. spring-boot-starter-actuator:该依赖用来提供常规的微服务管理端点。另外,在Spring Cloud Zuul中还特别提供了/routes端点来返回当前的所有路由规则。


二、创建启动类,通过@EnableZuulProxy注解开启Zuul的API网关服务


三、在application.properties中配置Zuul应用的基础信息

这里选择的是面向服务的路由配置,首先通过spring cloud eureka 和spring cloud zuul的整合,我们可以让路由的path不是映射具体的url,而是让它映射到某个具体的服务,比如说上面的“service ribbon”,而具体的url则交给eureka的服务发现机制去自动维护


在完成以上的这些配置之后,我们可以将注册中心、服务提供者、消费者,以及api-gateway都统统启动起来,如图:

然后根据配置的映射关系,向网关发起下面这些请求

http://localhost:1116/api-a/hello:该url符合/api-a/**规则,由api-a路由负责转发,该路由映射的serviceId为service-ribbon,所以最终/hello请求会被发送到service-ribbon服务的某个实例上去


通过面向服务的路由配置方式,我们不需要再为各个路由维护微服务应用的具体实例的位置,而是通过简单的path与serviceId的映射组合,使得维护工作变得简单


除了上述的路由功能之外,zuul还拥有请求过滤的功能,其实路由的转发就是通过过滤器来实现的,当然,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都有一定的限制,但是系统并不会将所有的微服务接口都对它开放,所以我们就有拦截和过滤的功能,下面就是定义的过滤器内容:

这里解释下:图片的方法都是干什么用的

  1. filterType:过滤器的类型,它决定过滤器在请求的哪个生命周期中执行。一共有4个生命周期,per:路由之前,routing:路由之时,post: 路由之后,error:发送错误调用。

  2. filterOrder:过滤器的执行顺序。当请求在一个阶段中存在多个过滤器时,需要根据该方法返回的值来一次执行

  3. shouldFilter:判断该过滤器是否需要被执行。这里我们直接返回了true,因此该过滤器对所有请求都会生效。实际运用中我们可以利用该函数来只定过滤器的有效范围

  4. run:过滤器的具体逻辑。这里我们通过ctx.setSendZuulResponse(false)令zuul过滤该请求,不对其进行路由,然后通过ctx.setResponseStatusCode(401)设置了其返回的错误码


在对api-gateway服务完成了上面的改造之后,我们可以重新启动它,并发起下面的请求,对上面定义的过滤器做一个验证


当我们访问http://localhost:1116/api-a/hello时,如图:

但是,如果我们增加一个accessTaken的值后,比如:

这样则就可以访问了,这样配置就起到了过滤的功能

文章转载自于果1023,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论