SpringCloud之zuul微服务网关

图例
这里写图片描述

Zuul做为网关层,自身也是一个微服务,跟其它服务Service-1,Service-2, … Service-N一样,都注册在eureka server上,可以相互发现,zuul能感知到哪些服务在线,同时通过配置路由规则(后面会给出示例),可以将请求自动转发到指定的后端微服务上,对于一些公用的预处理(比如:权限认证,token合法性校验,灰度验证时部分流量引导之类),可以放在所谓的过滤器(ZuulFilter)里处理,这样后端服务以后新增了服务,zuul层几乎不用修改。

pom

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

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

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

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

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

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

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

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

7、多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Balancing)
使用的多样化,以及让系统的边缘更贴近系统的使用者。

zuul中定义了四种不同生命周期的过滤器类型

pre:路由之前
routing:路由之时
post: 路由之后
error:发送错误调用

main启动类

@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
  public static void main(String[] args) {
    SpringApplication.run(ZuulApplication.class, args);
  }

  @Bean
  @LoadBalanced
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }
}

application.yml配置

1.常规配置
server:
  port: 8040
spring:
  application:
    name: microservice-gateway-zuul
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
management:
  security:
    enabled: false
2.指定微服务地址
zuul:
  routes:
    microservice-provider-user: /user/**
3.忽略指定微服务
zuul:
  ignored-services: microservice-provider-user
4.忽略所有微服务,只路由指定的微服务
zuul:
  ignored-services: '*'   # 使用'*'可忽略所有微服务
  routes:
    microservice-provider-user: /user/**
5.同时指定微服务的serviceId和对应路径
zuul:
  routes:
,
                                   # 可以任意起名。
      service-id: microservice-provider-user
      path: /user/**              # service-id对应的路径
6.同时指定path和url
zuul:
  routes:
    user-route:                   # 该配置方式中,user-route只是给路由一个
                                  #名称,
                                  # 可以任意起名。
      url: http://localhost:8000/ # 指定的url
      path: /user/**              # url对应的路径。  
                                  #这样就可以将/user/**映射到
                                  #http://localhost:8000/**,
                                  #这种方式访问不会作为HystrixCommand执行,
                                  #也不能使用ribbon来负载多个URL,
                                  #例6可以解决该问题
7.同时指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性。
zuul:
  routes:
    user-route:
      path: /user/**
      service-id: microservice-provider-user
ribbon:
  eureka:
    enabled: false    # 禁用掉ribbon的eureka使用
microservice-provider-user:
  ribbon:
    listOfServers: localhost:8000,localhost:8001
8.为Zuul添加映射前缀
zuul:
  prefix: /api
  strip-prefix: false
  routes:
    microservice-provider-user: /user/**
logging:
  level:
    com.netflix: DEBUG
9.忽略某些路径
zuul:
  ignoredPatterns: /**/admin/**   # 忽略所有包括/admin/的路径
  routes:
    microservice-provider-user: /user/**
10.本地转发
zuul:
  routes:
    route-name:
      path: /path-a/**
      url: forward:/path-b

猜你喜欢

转载自blog.csdn.net/qyj19920704/article/details/81088998