网关的概念

  1、什么是路由网关

  网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求、鉴权、监控、缓存、限流等功能。它将"1对N"问题转换成了"1对1”问题。

  通过服务路由的功能,可以在对外提供服务时,只暴露 网关中配置的调用地址,而调用方就不需要了解后端具体的微服务主机。

  2、为什么要使用微服务网关

  不同的微服务一般会有不同的网络地址,而客户端可能需要调用多个服务接口才能完成一个业务需求,若让客户端直接与各个微服务通信,会有以下问题:

  1)客户端会多次请求不同微服务,增加了客户端复杂性

  2)存在跨域请求,处理相对复杂

  3)认证复杂,每个服务都需要独立认证

  4)难以重构,多个服务可能将会合并成一个或拆分成多个

  如下:

  

  3、网关的优点

  微服务网关介于服务端与客户端的中间层,所有外部服务请求都会先经过微服务网关客户只能跟微服务网关进行交互,无需调用特定微服务接口,使得开发得到简化

  

  总的理解网关优点

  服务网关 = 路由转发 + 过滤器

  (1)路由转发:接收一切外界请求,转发到后端的微服务上去。

  (2)过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

 Zuul简介

  Zuul是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用。

  Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能:

   1、身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求;

   2、审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图;

   3、动态路由:动态地将请求路由到不同的后端集群;

   4、压力测试:逐渐增加指向集群的流量,以了解性能;

   5、负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求;

   6、静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群;

   7、多区域弹性:跨域AWS Region进行请求路由。

   Spring Cloud对Zuul进行了整合与增强。

  github地址:https://github.com/Netflix/zuul

Zuul网关项目搭建

  

  搭建Zuul网关

  1、新建模块(springcloud-gateway-zuul5555),引入Zuul、Eureka依赖

复制代码
 1 <!-- zuul -->
 2 <dependency>
 3     <groupId>org.springframework.cloud</groupId>
 4     <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
 5 </dependency>
 6 
 7 <!-- eureka client -->
 8 <dependency>
 9     <groupId>org.springframework.cloud</groupId>
10     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
11 </dependency>

 2、编辑配置文件application.yml如下: 

复制代码
1 # 端口
 2 server:
 3   port: 5555
 4 
 5 spring:
 6   application:
 7     name: cloud-gateway-zuul
 8 
 9 eureka:
10   client:
11     register-with-eureka: true
12     fetch-registry: true
13     service-url:
14       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka1.com:8887/eureka
复制代码

  3、编辑主启动类,使用注解@EnableZuulProxy,启动Zuul网关

复制代码
1 // 启用Zuul网关
2 @EnableZuulProxy
3 @SpringBootApplication
4 public class Zuul5555 {
5     public static void main(String[] args) {
6         SpringApplication.run(Zuul5555.class, args);
7     }
8 }
复制代码

  4、测试

    1)启动项目,

    2)验证,Zuul网关默认路由是否生效

      访问地址:http://localhost:5555/cloud-payment-service/payment/get/1

       

      由此判断,Zuul网关默认路由已生效   

    

    3)在application.yml增加配置,增加监控信息端口routes,filters

1 management:
2   endpoints:
3     web:
4       exposure:
5         include: health,info,routes,filters

      重新启动项目,

      查看路由信息:http://localhost:5555/actuator/routes

      查看过滤器信息:http://localhost:5555/actuator/filters