SpringCloud之网关 --(Zuul)

Zuul 介绍

This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.
现在官网上的是GetWay了

类似的Kong(是一款基于Nginx_Lua模块写的高可用,易扩展由Mashape公司开源的API Gateway项目。)
https://www.cnblogs.com/chenjinxi/p/8721401.html

为什么需要网关呢?

我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先暴露了我们实体机器的IP地址,别人一看你的IP地址就知道服务部署在哪里,让别人很方便的进行攻击操作。

第二,我们这么多服务,我们是不是要挨个调用它呀,我们这里假设做了个权限认证,我们每一个客户访问的都是跑在不同机器上的不同的JVM上的服务程序,我们每一个服务都需要一个服务认证,这样做烦不烦呀,明显是很烦的。

那么我们这时候面临着这两个极其重要的问题,这时我们就需要一个办法解决它们。首先,我们看IP地址的暴露和IP地址写死后带来的单点问题,我是不是对这么服务本身我也要动态的维护它服务的列表呀,我需要调用这服务本身,是不是也要一个负载均衡一样的玩意,

还有关于IP地址暴露的玩意,我是不是需要做一个代理呀,像Nginx的反向代理一样的东西,还有这玩意上部署公共的模块,比如所有入口的权限校验的东西。因此我们现在需要Zuul API网关。它就解决了上面的问题,你想调用某个服务,它会给你映射,把你服务的IP地址映射成

某个路径,你输入该路径,它匹配到了,它就去替你访问这个服务,它会有个请求转发的过程,像Nginx一样,服务机器的具体实例,它不会直接去访问IP,它会去Eureka注册中心拿到服务的实例ID,即服务的名字。我再次使用客户端的负载均衡ribbon访问其中服务实例中的一台。

API网关主要为了服务本身对外的调用该怎么调用来解决的,还有解决权限校验的问题,你可以在这里整合调用一系列过滤器的,例如整合shiro,springsecurity之类的东西。

Zuul的常用配置
server:
  port: 7001
spring:
  application:
    name: zuul-demo
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10000/eureka
#######################zuul 配置##################################################################
zuul:
  host:
    # 代理普通http请求的超时时间
    connect-timeout-millis: 2000
    ###socket超时时间
    socket-timeout-millis: 1000
    ## http连接池大小
    max-total-connections: 200
    # 每个host最大连接数
    max-per-route-connections: 20
###前缀
  #prefix: /nick
  ##允许被忽略的服务
  #ignored-services: helloclient
  ribbon-isolation-strategy: semaphore
  ##信号量模式下的最大并发
  semaphore:
    max-semaphores: 100

  ####zuul路由##########################

  routes:
    route1:
      #####拦截请求
      path: /nick/**
     ###转发给谁 url方式
      url: http://127.0.0.1:8083

    route2:
      #####拦截请求
      path: /tony/**
      ### 转发给谁? serviceId形式
      serviceId: feign-consumer

#    # 指定了一个路由,Id为uaa-token,在做验权的时候需要用到
    user-token:
      # 指定这个路径会匹配到这个路由。
      path: /token/byPhone
      # 这里表示,这个路由的实例信息,是通过ribbon负载均衡器进行获取的。值就是对应服务名
      serviceId: user-demo

# 以下是自定义的配置,配置的值会被注入到NickConfigurationBean这个类
nick:
  zuul:
    token-filter:
      noAuthenticationRoutes: user-token


########hystrix相关配置
# 注意项:
# 1、zuul环境下,信号量模式下并发量的大小,zuul.semaphore.maxSemaphores这种配置方式优先级最高
# 2、zuul环境下,资源隔离策略默认信号量,zuul.ribbonIsolationStrategy这种配置方式优先级最高
# 3、zuul环境下,commandGroup 固定为RibbonCommand
# 4、zuul环境下,commandKey 对应每个服务的serviceId
#
hystrix:
  command:
    # 这是默认的配置
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
          # 命令执行超时时间
            timeoutInMilliseconds: 2000

#####以下是关于token的配置#######
token:
  jwt:
    key: nick123
    iss: 11
    expm: 10

Zuul的流程和原理

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值