SpringCloud Netflix Zuul
API网关
API网关,顾名思义,是统一管理API的一个网络关口、通道,是整个微服务平台所有请求的唯一入口
所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能
有网关和没有网关:
没有:没有网关的时候, 用户可以随意访问一台微服务
有:有了网关后, 请求必须得要先经过网关, 确定这个请求是否合法,如果合法, zuul会对其做出判断 , 转发到指定的微服务,也会自动帮助做负责均衡
一、什么是zuul
服务网关最基本的功能便是路由转发 + 过滤器。
- 路由转发:接收一切外界请求,转发到后端的微服务上去;这里我拿我们较为熟悉的海关来类比,当一个商品要流入我国时我国的海关是一定要把控商品的流向的,比如可以流入到什么地方,不能流入到什么地方。
- 过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(路由转发也是通过过滤器实现的);这里我还是拿海关来类比,商品入流我国时我国的海关肯定要读商品做一系列的检查(是否合法,数量的控制以及后续的流向等等),比如毒品、违禁品、外来物种都是不能流入我国的。
二、为什么要有zuul
这里还是可以用海关还说明。
首先我们假设没有海关会发生什么,第一商品的安全我们肯定是没有办法全面保证的,因为每个商家的认知水平肯定是参差不齐的,并不是每个商家都能很好的区分商品的安全性;就比如白粉是毒品,但它看起来和面粉没啥区别,假设有恐怖分子向通过这种方式来残害某地人员,而商家又没有识别到,这就会有严重的问题发生;当然这只是一个假设,实际上恐怖分子也不会这么蠢。
正如上面所说,商家的认知水平是参差不齐的,所以商家要保证商品的安全性就一定要学习如何辨识商品的危险度,这对商家来说无疑提高了学习成本,故此个人认为这也是海关应运而生的一个条件。
同理,在微服务体系中每个服务也肯定是要保证自身服务的安全,防止外部的恶意攻击;因此由服务自身来实现安全校验无疑增加了开发成本,而且也并不能很好的保证服务的安全,所以网关的诞生也是如此。
综上:zuul网关可以帮助微服务体系下的业务应用专注与自身的业务逻辑,而不必为了API日志、服务安全、监控、负载等等业务外的功能增加开发成本。
过滤器(filter)是zuul的核心组件 zuul大部分功能都是通过过滤器来实现的,zuul中定义了4种标准过滤器类型:
PRE
这种过滤器在请求被路由之前调用。 可利用这种过滤器实现身份验证、在 集群中选择请求的微服务、记录调试信息等。
ROUTING
这种过滤器将请求路由到微服务。 这种过滤器用于构建发送给微服 务的请求,并使用 Apache HttpCIient或 Netfilx
POST:
这种过滤器在路由到微服务以后执行。可用来为响应添加标准 的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等
ERROR:
在其他阶段发生错误时执行该过滤器。
zull的快速入门
1、导入依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-starter-netflix-zuul
2、主启动类添加@EnableZuulProxy注解,开启路由网关
@SpringBootApplication
@EnableZuulProxy // 开启路由网关
public class SpringcloudZuulApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudZuulApplication.class, args);
}
}
3、编写配置文件
server:
port: 80
eureka:
client:
service-url:
defaultZone: http://localhost:7777/eureka #服务注册地址
spring:
application:
name: zuul