??记得点击上方蓝字“程序员小强”关注哦

一、前言介绍

1.什么是服务(API)网关?

服务网关也就是API网关,可以作为服务的统一入口。

可提供身份校验、动态路由、负载均衡、安全管理、统计、监控、流量管理、灰度发布、压力测试等功能。

API 网关有很多实现方式,如:Spring Cloud Zuul、 Nginx、Tyk、Kong。

本篇介绍的对象正是 Spring Cloud Zuul

Spring Cloud Zuul 是基于 Netflix Zuul 的微服务路由和过滤器的解决方案,也用于实现 API 网关。其中,路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入门的基础。而过滤功能是负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

Spring Cloud Zuul 和 Eureka 进行整合时,Zuul 将自身注册到 Eureka 服务中,同时从 Eureka 中获取其他微服务信息,以便请求可以准确的通过 Zuul 转发到具体微服务上。

2.什么是Zuul?

Zuul是Netflix开源的服务网关/API网关,提供动态路由、监控、弹性、安全性等功能。

3.过滤器类型

Zuul中有以下几种典型的过滤器类型。

  • pre:在请求被路由到目标服务前执行;

  • routing:在请求被路由到目标服务时执行,这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方;

  • post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;

  • error:请求在其他阶段发生错误时执行。

4.过滤器常见使用场景

  • 前置(Pre)

    • 限流

    • 鉴权

    • 参数校验调整

    • 日志打印

  • 后置(Post)

    • 统计

    • 日志

5.过滤器生命周期

二、路由配置

1.路由配置参数说明

  • 路由配置基础参数说明

配置项 ken.io 的说明
zuul.routes.{routename} 路由名称,自定义,支持小写字母、-
zuul.routes.{routename}.path 要路由的路径,支持通配符:?、 、*
zuul.routes.{routename}.serviceId 注册在Eureka的ServiceName
zuul.routes.{routename}.url 如果应用没有注册在Eureka,也可以通过指定Url来路由
zuul.ignored-services 忽略指定的服务,可以配置多个,以,间隔
zuul.ignored-patterns 忽略指定的路径,可以配置多个,以,间隔。同样支持通配符
  • path通配符说明

通配符 说明 path举例 匹配示例
? 匹配单个任意字符 /test/?

/test/a、/test/b

* 匹配任意字符

/test/*

/test/a、/test/b、/test/ab
** 匹配任意字符且支持多级目录 /test/** /test/a、/test/b、/test/ab、/test/ab/c

注:若对于通配符来说,没有特定的需求,使用**就好

2.路由配置示例

2.1路由到到不同的服务

zuul:  routes:    api-ribbon:      path: /api-ribbon/**      serviceId: server-consum-ribbon

适用于:服务随着业务的发展不断扩大需要拆分,这时候我们可以通过api兼容+路由配置来适配,可以对上游无感知。

例如用户服务(userservice)有三个核心模块,auth、info、safe,经过拆分拆出来两个服务:authservice、safeservice。那么拆分后的路由配置:

zuul:  routes:    user-auth:      path: /user/auth/**      serviceId: authservice    user-safe:      path: /user/safe/**      serviceId: safeservice    user:      path: /user/**      serviceId: userservice

因为路由规则匹配顺序是按配置顺序来的,所以未拆出去的配置在最后。

2.2路由到指定站点

当某应用并没有注册到服务注册中心(Eureka),但又需要可以通过指定url的访问

zuul:  routes:    ken-io:      path: /ken/**      url: https://ken.io/

2.3忽略指定路径

适用于某些通用的接口不暴露给外部,

例如每个应用都会有一个健康检查入口,但是这个入口是不应该暴露给外部的,就可以通过忽略规则屏蔽掉。

zuul:  ignored-patterns: /**/hs,/**/health

2.4忽略指定服务

zuul:  ignored-services: aservice,bservice

2.5配置访问前缀

可以通过以下配置来给网关路径添加前缀,此处添加了/api前缀,

这样我们需要访问http://xxx:port/api/xxxx才能访问到接口

zuul:  prefix: /api #给网关路由添加前缀

2.6不同API路由统一前缀

在不同服务路由的开头附加一个的前缀是很常见的

比如希望在不同服务的路由的开头都加上一个/api的前缀,Zuul也是支持的。可以使用如下配置来实现这一功能:

zuul:  ignored-services: '*'  prefix: /api  routes:    organizationservice: /organization/**    licenseservice: /license/**

2.7Header过滤及重定向添加Host

  • Zuul在请求路由时,默认会过滤掉一些敏感的头信息,以下配置可以防止路由时的Cookie及Authorization的丢失:

    zuul:  sensitive-headers: Cookie,Set-Cookie,Authorization #配置过滤敏感的请求头信息,设置为空就不会过滤
  • Zuul在请求路由时,不会设置最初的host头信息,以下配置可以解决:

zuul:  add-host-header: true #设置为true重定向是会添加host请求头

2.8常用配置

zuul:  routes: #给服务配置路由    user-service:      path: /userService/**    feign-service:      path: /feignService/**  ignored-services: user-service,feign-service #关闭默认路由配置  prefix: /proxy #给网关路由添加前缀  sensitive-headers: Cookie,Set-Cookie,Authorization #配置过滤敏感的请求头信息,设置为空就不会过滤  add-host-header: true #设置为true重定向是会添加host请求头  retryable: true # 关闭重试机制  PreLogFilter:    pre:      disable: false #控制是否启用过滤器

SpringCould篇推荐

1.SpringCould实战开篇

2.SpringCould之服务注册与发现Eureka服务端搭建

3.SpringCould之服务生产者项目搭建

4.SpringCould之服务消费者方式Feign

5.SpringCould之服务消费方式Ribbon+RestTemplate

6.SpringCould之断路器(Hystrix)

下一篇 预告SpringCould之服务网关(zuul)代码实战实例

zuul网关_SpringCould之服务网关(zuul)介绍与配置相关推荐

  1. spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定

    一.微服务网关Spring Cloud Gateway 1.1 导引 文中内容包含:微服务网关限流10万QPS.跨域.过滤器.令牌桶算法. 在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuu ...

  2. 网关服务器性能,服务网关API路由导致的性能问题分析

    背景 酷家乐是从 16 年初开始进行服务化改造的,因为一些特殊原因,无法直接使用主流的dubbo 或 spring cloud,因此酷家乐研发团队在开源的基础上做了二次开发,迅速上线了一套定制型的微服 ...

  3. 商城项目的微服务网关,微服务网关的主要作用

    微服务网关的作用: 不使用微服务网关的缺陷: 1.每一个页面会对接很多个微服务,调用起来繁琐 2.调用微服务过多,很容易暴露出端口,增加了服务器的受攻击的面积 3.跨域的问题,没有加网关时,我们是加的 ...

  4. python 微服务 网关_微服务网关

    微服务网关作用: API网关:跨一个或多个内部API提供单个统一的API入口点.通常还包括限制访问速率和有关安全性等特点.API网关可以为外部消费者提供统一的入口点,而与内部微服务的数量和组成无关. ...

  5. SpringCloud OpenFeign服务调用客户端介绍及配置使用

    一.OpenFeign介绍 OpenFeign是Netfix开发的一款声明式,模板化的Http服务调用客户端.使用在服务调用者工程端.OpenFeign的负载均衡也为客户端负载均衡.一下简称Feign ...

  6. Spring Cloud版——电影售票系统七使用 Zuul 构建微服务网关

    2019独角兽企业重金招聘Python工程师标准>>> GitHub地址:https://github.com/leebingbin/SpringCloud.MovieTicketi ...

  7. Zuul微服务网关、容错与监控、Zuul路由端点、路由配置、Zuul上传文件、Zuul过滤器、Zuul异常处理、Zuul回退、Zuul聚合微服务

    一.为什么要使用微服务网关 二.Zuul 1.编写Zuul微服务网关 2.Zuul的Hystrix容错与监控 3.Zuul的路由端点 4.路由配置 1.自定义指定微服务的访问路径 2.忽略指定微服务 ...

  8. SpringCloud→SpringCloud搭建Zuul动态服务网关(五)

    文章目录 SpringCloud搭建Zuul动态服务网关 网关分类 开放Api 微服务网关 API服务管理平台 网关设计 开放API接口 内网API接口 网关框架 使用Zuul实现反向代理 使用Zuu ...

  9. 使用Zuul构建微服务网关(路由)

    文章目录 一.网关产生的背景 二.Zuul简介 三.Zuul实现API网关 四. 路由配置详解 五.Zuul的容错与回退 六.Zuul的安全与Header 1.敏感头设置 2.忽略Header 七.Z ...

最新文章

  1. 如何用jsp在线自动批改_推荐:5个好用的免费自动化在线营销工具
  2. 堆栈——Windows核心编程学习手札之十八
  3. 初识HTML流水笔记
  4. Ambari 2.6.0 HDP 2.6.3集群搭建
  5. 08 | 栈:如何实现浏览器的前进和后退功能?
  6. 【C语言重点难点】数据类型、常量和变量
  7. libpng warning: iCCP: known incorrect sRGB profile
  8. 【mac】mac 安装 RibbitMQ 报错 Error when reading /Users/lcc/.erlang.cookie: eacces
  9. TensorFlow 实战(四)—— tensor 的认识
  10. 有限时间不明确需求项目的上线(部分还款)
  11. windows命令_Windows自带强大的入侵检测工具——Netstat 命令 查询是否中木马
  12. 操作系统学习---进程
  13. AutoCAD2014 无法通过快捷方式启动
  14. JavaCC中扩展的正规表达式
  15. 正版软件 Microsoft 365 家庭版 1用户 58
  16. TestNG入门教程-6-enabled和priority属性
  17. 计算机一级西溪2,我的西溪研学日记(二)——不一样的课堂,不一样的精彩...
  18. 手把手教你作者python机器人,自己训练一个机器人助手
  19. 杂谈~关于踩shit
  20. 网安之PHP开发第十六天

热门文章

  1. go语言--竞争、原子函数、互斥锁
  2. forEach、for...in、for...of
  3. EBS AP 创建会计科目失败
  4. funuiTitle-居中问题修改
  5. 2015年全年目标及执行情况跟踪
  6. CC学iOS杂记 001_Device
  7. asp.net的10个提升性能或扩展性的秘密(二)
  8. 计算机开机无讯号,【图片】电脑突然开机没反应,显示器没信号!~【显卡吧】_百度贴吧...
  9. python input函数详解_Python如何使用input函数获取输入,看完你就会了
  10. python input函数详解_对Python3中的input函数详解