原创

微服务SpringCloud之Zuul网关

为什么要使用微服务网关
如果让客户端直接与各个服务通讯,会有以下问题:

  • 客户端会多次请求不同的微服务,增加客户端的复杂性。
  • 存在跨域请求,在一定场景下处理相对复杂。
  • 认证复杂,每个服务都需要独立认证。
  • 难以重构,随着项目的迭代,可能需要重新划分微服务。
  • 某些微服务可能使用了对防火墙、浏览器不友好,直接访问时会有一定的困难。
    以上问题可以借助微服务解决。微服务网关介于客户端与服务器端之间的中间层,所有的外部请求都会先经过微服务网关。

    使用网关的优点:
  • 易于监控。
  • 易于认证。
  • 减少了客户端与各个微服务之间的交互次数。
    Zuul简介
    Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用。
    Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能。
  • 身份证与安全:识别每个资源的验证要求,并拒绝那些与要求不符合的请求。
  • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  • 动态路由:动态的将请求路由到不同的后端集群。
  • 压力测试:逐渐增加指向集群的流量,以了解性能。
  • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理: 在边缘位置直接建立部分响应,从而避免其转发到内部集群。
  • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB 使用的多样化,以及让系统的边缘更贴近系统的使用者。
    编写Zuul微服务网关
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
      </dependency>
    
    Zuul网关配置
    zuul:
    ignoredServices: "*"
    add-host-header: true
    host:
    connect-timeout-millis: 30000
    socket-timeout-millis: 30000
    strip-prefix: true
    routes:
    applet:
    path: /applet/** #请求
    serviceId: applet #注册到eureka中的实例name
    stripPrefix: true #是否去掉path中// 之间的内容
    sensitiveHeaders:  #是否去掉敏感信息,如果为空则是全部返回
    

/*
@author :邬志斌(www.wzbjsz.cn)
@date :Created in 2019 06 15
/
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
@EnableFeignClients
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(ZuulApplication.class);
application.setBannerMode(Banner.Mode.LOG);
application.run(args);
}
}
以上就是网关Zuul 编写

过滤器类型与请求生命周期

  • PRE:这种过滤器在请求被路由之前调用。可利用这种过滤器实现身份验证、在集群中选择请求的微服务。
  • ROUTITNG:这种过滤器将请求路由到微服务。这种用于构建发送给微服务的请求,并使用HTTPClient或Ribbon请求微服务。
  • POST:这种过滤器在路由到微服务以后执行。这种用来响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送到客户端。
  • ERROR:在其他阶段发生错误时执行该过滤器。
正文到此结束
本文目录