系列文章(更新ing):

「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config

「 从0到1学习微服务SpringCloud 」07 RabbitMq的基本使用

「 从0到1学习微服务SpringCloud 」08 构建消息驱动微服务的框架 Spring Cloud Stream

为什么需要服务网关

假如当前有十几个微服务服务,订单,商品,用户等等,那客户端需要和每个服务逐一打交道?这显然是不现实的,这就需要有一个统一入口,它就是服务网关。

常用的网关方案

  • Nginx + Lua

  • Kong

  • Tyk

  • Spring Cloud Zuul

这里就不一一介绍了,感兴趣的可自行查资料。今天的主角是Zuul。

Zuul虽然在性能上和nginx没法比,但它也有它的优点。Zuul 提供了认证鉴权,动态路由,监控,弹性,安全,负载均衡等边缘服务,在团队规模不大的情况下,没有专门负责路由开发时,使用Zuul当网关是一个快速上手的好方案。

nginx和Zuul是可以配合使用的,发挥各自的优点,使用nginx作为负载均衡实现高并发的请求转发,Zuul用作网关

Zuul的特点

  • 路由+过滤器 = Zuul

  • 核心是一系列过滤器

Zuul的工作原理

zuul的核心是一系列的filters, 其作用可以类比Servlet框架的Filter,或者AOP。

过滤器之间没有直接进行通信,而是通过Request Context(上下文)进行数据传递。

Zuul的过滤器是由Groovy写成,这些过滤器文件被放在Zuul Server上的特定目录下面,Zuul会定期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中以便过滤请求使用。

四种过滤器

(1) PRE(前置):这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现鉴权、限流、参数校验调整等。

(2) ROUTING(路由):这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

(3) POST(后置):这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端、日志等。

(4) ERROR(错误):在其他阶段发生错误时执行该过滤器。

过滤器的生命周期

HTTP请->一系列过滤器->微服务->HTTP响应

Zuul的基本使用

1.新建一个子模块,勾选eureka discovery和zull

(我们这里后面的练习就不用config组件了,因为在github修改配置有点麻烦)

并添加父子模块的关联,把子模块中多余的声明删掉

2.yml文件添加相关配置,入口类添加@EnableEurekaClient和@EnableZuulProxy注解

server:
port: 8900
spring:
application:
name: api-gateway
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/

3.现在已经可以做到路由的功能了,我们来试试。启动service-hi应用,通过网关入口进行访问,访问规则:网关域名/目标服务/目标接口名,下面调用service-hi服务的hi接口

4.可自定义路由,设置自定义的路径。

配置如下,两种方式

zuul:
routes:
# 方法1
# 声明一个路由规则,名称随意取名就行
# 该规则为 /myHi/** 路由到 /service-hi/** (**为任意匹配)
myHi:
# 路由路径 (路由到哪个路径)
path: /myHi/**
# 服务名 (需要路由的服务)
serviceId: service-hi
# 这里需要注意一下,使用zuul进行路由,默认不传递cookie
# 若要传递,添加下面的配置(内容为空就行)
sensitivedHeaders: # 方法2
# 路由声明 简洁写法 服务名: 路由路径
service-hi: /myHi/** # 忽略路径,不做路由
ignored-patterns:
- /service-hi/hi
# 也可以使用通配符
- /**/hi

访问配置的路由路径,即可访问到相应接口啦~

Zuul的高可用

  • 多个Zuul节点注册到Eureka Server上,不需要其他的配置

  • Nginx和Zuul"混搭"使用,取长补短

已将代码上传到github

https://github.com/zhangwenkang0/springcloud-learning-from-0-to-1

如果觉得不错,分享给你的朋友!

THANDKS

  • End -

一个立志成大腿而每天努力奋斗的年轻人

伴学习伴成长,成长之路你并不孤单!

「 从0到1学习微服务SpringCloud 」10 服务网关Zuul的更多相关文章

  1. 「 从0到1学习微服务SpringCloud 」09 补充篇-maven父子模块项目

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config 「 从0到1学习微服务SpringCloud 」07 RabbitM ...

  2. 「 从0到1学习微服务SpringCloud 」08 构建消息驱动微服务的框架 Spring Cloud Stream

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  3. 「 从0到1学习微服务SpringCloud 」07 RabbitMq的基本使用

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  4. 「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  5. 「 从0到1学习微服务SpringCloud 」05服务消费者Fegin

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  6. 「 从0到1学习微服务SpringCloud 」04服务消费者Ribbon+RestTemplate

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  7. 「 从0到1学习微服务SpringCloud 」03 Eureka的自我保护机制

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 Eureka的高可用需要 ...

  8. 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! Spring Cloud Eureka 基于Netflix Eureka做了二次封装(Spring Clo ...

  9. 「 从0到1学习微服务SpringCloud 」01 一起来学呀!

    有想学微服务的小伙伴没?一起来从0开始学习微服务SpringCloud,我会把学习成果总结下来,供大家参考学习,有兴趣可以一起来学!如有错误,望指正! Spring .SpringBoot.Sprin ...

随机推荐

  1. 关于vue-cli打包配置部署404

    在vue脚手架(vue-cli)下我很很快的就可以搭建自己的开发环境,但是我们把项目编写完后,需要进行打包上线会遇到各种问题,在根据版本问题,(vue3的版本跟之前相比少了很多配置项),下面是我用老版 ...

  2. dotnet 控制台读写 Sqlite 提示 no such table 找不到文件

    在使用 dotnet 读写 Sqlite 可以通过 EF Core 的方法,但是在 EF Core 创建的数据库可能和读写的数据库不是相同的文件 在我运行代码的时候发现在通过迁移创建数据库,创建的文件 ...

  3. [HNOI2019]白兔之舞

    memset0 多合一无聊题 mod k=t,并且k是p-1的约数 单位根反演石锤了. 所以直接设f[i]表示走i步的方案数, 然后C(L,i)分配位置,再A^i进行矩乘得到f[i] 变成生成函数F( ...

  4. 善用GIMP(Linux下的Photoshop),图像处理轻松又自由

    善用GIMP(Linux下的Photoshop),图像处理轻松又自由 作者: 善用佳软 日期: 2013-02-16 分类: 2 图像影音 标签: GIMP, image 1. GIMP是什么? GI ...

  5. .NET Core + docker入门

    下载安装docker docker客户端,今天vpn小水管实在是受不了,于是找了国内的下载地址 配置docker加速器 参考博文Docker for windows10 配置阿里云镜像 docker入 ...

  6. git之github下载篇(ssh需要配置密钥)

    1.使用git命令行下载 在想要下载的文件夹打开命令行 git clone ssh 成功如图所示  2.使用小乌龟图形界面克隆 在文件夹右键鼠标 如果复制有链接,会自动填入.点击确定 成功后如图

  7. 优化器,SGD+Momentum;Adagrad;RMSProp;Adam

    Optimization 随机梯度下降(SGD): 当损失函数在一个方向很敏感在另一个方向不敏感时,会产生上面的问题,红色的点以“Z”字形梯度下降,而不是以最短距离下降:这种情况在高维空间更加普遍. ...

  8. PSR-1之PHP代码文件必须以不带BOM的UTF-8编码

    BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE“的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符 ...

  9. 2019 ICPC南昌网络赛 B题

    英雄灭火问题忽略了一点丫 一个超级源点的事情,需要考虑周全丫 2 #include<cstdio> #include<cstring> #include<queue> ...

  10. DEVOPS技术实践_22:根据参数传入条件控制执行不同stage

    前面学习了参数的传递和调用,下面研究一下根据参数作为条件执行不同的stage 使用叫when 和expression控制某一个stage的运行, 运行场景例如写了多个stage,这个pipeline脚 ...