微服务架构---认识Zuul

目录

  • 认识Zuul
    • 简单的例子
  • 第一个Zuul程序
    • 步骤1:创建父工程zuul-1
    • 步骤2:创建HystrixController类
    • 步骤3:搭建服务消费者eureka-consumer项目
      • (1)创建一个config包,在config包下新建配置类RestConfig
      • (2)创建一个service包,在service包下新建LocalItemService类
      • (3)创建一个controller包,在controller包下新建LocalItemController类
    • 步骤4:创建网关服务gateway-zuul项目
      • (1)创建gateway-zuul项目,导入依赖
  • 思考:
    • 1.该地址等价于?
    • 2.什么是spring cloud zuul?
      • 1. **路由功能**
      • 2. **过滤器模式**
      • 3. **负载均衡**
      • 4. **容错机制**
      • 5. **总结**
      • 结合实际场景加深理解
  • 总结

认识Zuul

在微服务架构中,Zuul 可以作为 API Gateway(API 网关),它充当着客户端和服务端之间的桥梁。使用 Zuul
作为网关有几个优点:

  1. 简化客户端:通过将所有对外服务的请求集中在一个网关上,客户端只需要与这个单一的入口点打交道,而不是与多个微服务直接交互。这减少了客户端的复杂度。

  2. 跨域支持:Zuul 可以配置来处理跨域资源共享(CORS)的问题,这意味着它可以更轻松地管理来自不同源的请求。

  3. 易于重构:当需要调整微服务边界时,Zuul 可以帮助隔离变化,减少客户端受到的影响。这意味着可以在不改变客户端代码的情况下调整服务端结构。

  4. 安全性和防护:Zuul 可以用来实施统一的安全策略,如认证和授权。此外,它还可以提供防火墙功能,保护内部服务不受外部恶意请求的影响。

  5. 路由和负载均衡:Zuul 可以根据请求的 URL 和其它条件决定请求应该被发送到哪个服务实例,同时可以利用 Ribbon 进行智能负载均衡。

  6. 请求过滤器:Zuul 支持请求前后的过滤器机制,允许开发者在请求进入服务之前或响应返回给客户端之前执行一些操作,比如记录请求日志、修改请求/响应等。

  7. 断路器模式:Zuul 可以与 Hystrix 结合使用,来实现服务间的断路器模式,当某个服务出现问题时,可以快速失败而不影响整个系统的稳定性。


简单的例子

好的,让我们用一个简单的例子来解释 Zuul 在微服务架构中的作用。

想象一下,你正在经营一家大型购物中心。这家购物中心里有很多不同的店铺,每个店铺都销售不同类型的商品,比如服装店、书店、餐厅等。这些店铺就像是一个个独立的微服务,它们各自负责一部分业务逻辑。

现在,假设你是顾客,想要在这个购物中心里购物。如果购物中心没有统一的入口,你每次想要购物时,就需要知道每个店铺的确切位置,甚至可能还需要了解不同店铺的营业时间和特别规定。这会让购物体验变得非常复杂和不便。

为了解决这个问题,购物中心设置了一个统一的大门,也就是“服务网关”。这个大门就像是 Zuul,在这里,顾客(客户端)只需要知道购物中心的位置,不需要知道具体店铺在哪里。当你进入大门后,会有工作人员(类似于 Zuul 中的过滤器)帮助你导航到你需要去的店铺,并处理可能出现的各种问题,如维护期间的临时关闭、排队等候等。

此外,如果购物中心里的店铺位置发生变化(对应于微服务的重构),你作为顾客并不需要知道这些变化,因为你总是通过同一个大门进入购物中心。这就像 Zuul 帮助隐藏了服务变更,从而让客户端的体验保持一致。

再者,购物中心的大门也可以帮助处理一些公共事务,比如安全检查(身份验证)、控制人流(负载均衡)、处理紧急情况(断路器)等等。所有这些功能都可以在顾客接触到具体的店铺之前处理好,确保了顾客有一个顺畅的购物体验。

所以,Zuul 就像是购物中心的大门,它帮助客户简化了访问流程,同时提供了额外的安全性和便利性。


第一个Zuul程序

步 骤:

1.搭建eureka-server项目

2.搭建服务提供者eureka-provider项目

3.搭建服务消费者eureka-consumer项目

4.搭建网关服务gateway-zuul项目

5.项目测试

步骤1:创建父工程zuul-1

将搭建的Eureka基本应用中的3个子项目都复制到zuul-1父工程中,并依次添加为Maven项目。
在这里插入图片描述

步骤2:创建HystrixController类

改造服务提供者eureka-provider项目

新建controller包,在controller包下创建HystrixController类:
在这里插入图片描述

步骤3:搭建服务消费者eureka-consumer项目

改造服务消费者eureka-consumer项目

(1)创建一个config包,在config包下新建配置类RestConfig

在这里插入图片描述

(2)创建一个service包,在service包下新建LocalItemService类

在这里插入图片描述

(3)创建一个controller包,在controller包下新建LocalItemController类

在这里插入图片描述

步骤4:创建网关服务gateway-zuul项目

(1)创建gateway-zuul项目,导入依赖

使用Spring Initializr方式创建一个名称为gateway-zuul的Spring Boot项目,这里将Group命名为com.bushuo,将Artifact命名为gateway-zuul,添加Zuul、Test、Eureka Client、Web依赖。其中,Zuul依赖具体如下:

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

注意版本号要与springboot一致最好
springboot的版本号

添加配置文件

(2)在配置文件进行相关配置

引入依赖后,在全局配置文件application.yml进行相关配置,包括配置程序名称、端口号,服务注册地址等,配置后的application.yml代码如下:
在这里插入图片描述

server:port: 8835
spring:application:name: gateway-zuul
eureka:client:service-url:defaultZone: http://localhost:7071/eureka/
zuul:routes:eureka-consumer:path: /eureka-consumer/**

(3)开启Zuul功能

在项目gateway-zuul的启动类GatewayZuulApplication添加@EnableZuulProxy注解开启服务网关Zuul功能。
在这里插入图片描述
项目测试

依次启动项目eureka,eureka-provider,eureka-consumer,gateway-zuul。启动成功后,使用浏览器访问http://localhost:7071。
在这里插入图片描述

这里我们访问消费者服务跟之前有所不同,通过网关服务访问消费者需要在访问地址前加上在application.yml文件中配置的Zuul路由的前缀/eureka-consumer,访问路径:http://localhost:8835/eureka-consumer/hi?id=1,观察效果。
在这里插入图片描述

思考:

1.该地址等价于?

实际等价的具体地址取决于 eureka-consumer 服务的具体配置和部署情况。
http://localhost:7071/eureka/

2.什么是spring cloud zuul?

Spring Cloud Zuul 是一个用于微服务架构的 API网关。它主要负责将外部请求路由到后端服务,并提供了过滤器机制来处理请求的预处理和后处理任务。具体来说,Zuul 具有以下功能:

路由功能:作为前端网关,Zuul 根据配置的规则将请求转发到不同的微服务。

过滤器模式:Zuul 允许在请求生命周期的不同阶段执行自定义逻辑,如认证、日志记录、请求和响应的修改等。

负载均衡:通过与 Ribbon 的集成,Zuul可以实现请求到后端服务实例的智能分配。

容错机制:利用 Hystrix 断路器,Zuul 提高了系统的健壮性,防止因单个服务故障导致整体系统不可用。

1. 路由功能

  • 理解:Zuul 作为 API 网关,就像机场的安检和登机口,负责检查和引导乘客(请求)到正确的航班(服务)。
  • 应用:假设你有一个电商平台,用户的所有请求(如登录、购物车、订单)都先经过 Zuul,然后 Zuul 根据请求类型(如 URL 路径)将其路由到相应的微服务(如用户服务、购物车服务、订单服务)。

2. 过滤器模式

  • 理解:Zuul 的过滤器类似于机场的安全检查站,可以检查行李(请求数据),并在乘客(请求)登机(到达服务)前后执行特定任务。
  • 应用:在请求到达服务之前,Zuul 可以执行认证(检查用户是否已登录)、日志记录(记录请求详情)、请求修改(如增加请求头或参数)。在请求完成后,还可以修改响应(如添加响应头)。

3. 负载均衡

  • 理解:Zuul 可以像机场调度中心一样,智能地分配飞机(服务实例)来处理乘客(请求)。
  • 应用:如果用户的请求需要访问“订单服务”,而“订单服务”有多个实例,Zuul 会根据负载均衡策略(如轮询、随机)选择一个合适的实例来处理请求。

4. 容错机制

  • 理解:Zuul 使用 Hystrix 断路器,就像电路中的保险丝,当电流(请求)过大时(如服务故障),会自动切断电流(停止请求),防止整个电路(系统)烧毁。
  • 应用:如果某个服务暂时不可用,Zuul 会停止向该服务发送请求,并返回一个友好的错误消息,而不是让整个系统崩溃。

5. 总结

  • 理解:Zuul 不仅是一个门卫,还是一个多才多艺的助手,不仅引导请求到正确的位置,还能在过程中做很多有用的工作,从而增强系统的安全性、可维护性和性能。
  • 应用:通过 Zuul,开发人员可以集中管理所有的外部请求,确保每个请求都被恰当地处理,同时也能快速定位和解决潜在的问题。

结合实际场景加深理解

想象一下,你在设计一个在线教育平台,平台上有多种服务,如课程服务、支付服务、评论服务等。使用 Zuul 可以让你的架构更加清晰,同时还能增强系统的鲁棒性和扩展性。用户的所有请求首先到达 Zuul,然后 Zuul 决定请求应路由到哪个服务,并在必要时执行过滤逻辑,如认证、日志记录等。

总结

在编程当中,我需要明白有风有雨是生活的常态,以风雨无阻的心态去面对,保持风雨的兼程的状态。
这是我对 Zuul 的初步认识,欢迎各位专业人士给予指点并予以纠正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/442685.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP-HarmonyOS Application Developer 习题(八)

&#xff08;填空&#xff09;1、声明式开发范式中使用装饰器( )装饰的结构体具有组件化能力&#xff0c;能够成为一个自定义组件。 答案&#xff1a;component 分析&#xff1a;component 装饰的struct表示该结构体具有组件化能力&#xff0c;能够成为一个独立的组件&#xff…

基于springboot的篮球竞赛预约平台

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则

文章目录 C 继承详解&#xff1a;初阶理解与实战应用前言第一章&#xff1a;继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章&#xff1a;继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…

OkHttp

OkHttp是一个用于Android和Java应用的高效HTTP客户端库。它具有以下优点&#xff1a; 优点 高效连接池&#xff1a; 支持连接复用&#xff08;Connection Pooling&#xff09;减少延迟。有效管理HTTP/2多路复用。 透明压缩&#xff1a; 自动处理Gzip压缩&#xff0c;减少传输…

Label Studio 半自动化标注

引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型,也可以根据需要进行扩展和自定义。 1…

dotnet7==windows ZIP方式安装和web demo和打包

下载ZIP Download .NET 7.0 (Linux, macOS, and Windows) 解压 创建项目 mkdir MyWebApp cd MyWebApp "C:\Users\90816\Downloads\dotnet-sdk-7.0.317-win-x64\dotnet.exe" new webapp -n MyWebApp 运行项目 "C:\Users\90816\Downloads\dotnet-sdk-7.0.317-…

k8s的简介和部署

一、k8s简介 在部署应用程序的方式上面&#xff0c;主要经历了三个阶段&#xff1a; 传统部署:互联网早期&#xff0c;会直接将应用程序部署在物理机上优点:简单&#xff0c;不需要其它技术的参与缺点:不能为应用程序定义资源使用边界&#xff0c;很难合理地分配计算资源&…

Docker 实践与应用举例

Docker 实践与应用举例 Docker 已经成为现代软件开发和部署中的重要工具&#xff0c;通过容器化技术&#xff0c;开发者可以轻松管理应用的依赖环境、简化部署流程&#xff0c;并实现跨平台兼容性。本篇博客将详细介绍 Docker 的基本概念、实践操作以及应用场景&#xff0c;帮…

【软件部署安装】OpenOffice转换PDF字体乱码

现象与原因分析 执行fc-list查看系统字体 经分析发现&#xff0c;linux默认不带中文字体&#xff0c;因此打开我们本地的windows系统的TTF、TTC字体安装到centos机器上。 安装字体 将Windows的路径&#xff1a; C:\Windows\Fonts 的中文字体&#xff0c;如扩展名为 TTC 与TT…

shell脚本写代码

用简单的test语句来判断是否闰年 #! /bin/bash read -p "sd " yearif [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]thenecho "是润年"elseecho "不是闰年" fi判断一个数是否为偶数 #! /bin/bash read -p "…

LINUX——内核移植、内核编译教程

Linux内核编译是一个将内核源代码转换成可在特定硬件架构上运行的二进制文件的过程。以下是编译Linux内核的一般步骤&#xff1a; 1、准备工作&#xff1a; 确保安装了必要的编译工具&#xff0c;如gcc、make、ncurses库&#xff08;用于make menuconfig&#xff09;等。 2、…

数据结构-八大排序之堆排序

堆排序 1.1 基础知识 原理&#xff1a; 1. 利用完全二叉树构建大顶堆 2. 堆顶元素和堆底元素进行交换&#xff0c;除堆底元素之外其余元素继续构建大顶堆 3. 重复2&#xff0c;直到所有元素都不参与构建 整个数组排序完成 完全二叉树&#xff1a; 数据从上到下&#x…

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求 内网部署safeline&#xff0c;通过frp让外网访问内部web网站服务&#xff0c;让safeline记录真实外网攻击IP safeline 跟 frp都部署在同一台服务器&#xff1a;192.168.2.103 frp client 配置 frpc只需要在https上添加transport.proxyProtocolVersion "v2"即…

基于SpringBoot的设备管理系统源码带本地搭建教程

技术框架&#xff1a;SpringBoot mybatis thymeleaf Mysql5.7 Fastjson Druid Shiro 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统功能&#xff1a;登陆&#xff0c;注册&#xff0c;系统用户管理&#xff0c;角色&#xff0c;部门管理&#xff0c;…

软件测试之压力测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 压力测试 压力测试是一种软件测试&#xff0c;用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

《恋与深空》陷抄袭争议,但不影响它登顶App Store畅销总榜

伴随着《恋与深空》全新混池而来的&#xff0c;是文案疑似抄袭的负面新闻。 9月23日&#xff0c;《恋与深空》上线了第一个国风混池“欲揽旖旎色”&#xff0c;但比玩家的夸奖与反馈更先来的&#xff0c;是男主角之一秦彻的剧情文案抄袭的争议&#xff0c;#恋与深空 抄袭#火速…

渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解

目录 写在前面 使用方法 相关代码 写在前面 最近在学习使用Burp Suite时发现其intruder模块无法实现多种模式的混合使用&#xff0c;就如想要暴力破解账号和口令两个区域并同时跟踪网页的csrf_token时BP似乎不能很方便的实现这一功能&#xff0c;于是自己在练习时就想到了用…

三 星 SCX-4521F 硒 鼓 清 零 及 一 般 故 障 维 修 浅 谈

基本参数 耗材容量:SCX-4521D3/XIL(3000页) 功 率:平均功率350W、休眠模式10W 一般故障讲解 一、三星SCX-4521F打印机更换硒鼓(或加粉)后仍显示墨粉用尽 (加粉清零、关闭碳粉通知) 按菜单------#1934(快速按完)------屏幕会有TECH字母显示------菜单------向…

0基础跟德姆(dom)一起学AI 机器学习04-逻辑回归

逻辑回归简介 应用场景 逻辑回归是解决二分类问题的利器 数学知识 sigmoid函数 概率 极大似然估计 核心思想&#xff1a; 设模型中含有待估参数w&#xff0c;可以取很多值。已经知道了样本观测值&#xff0c;从w的一切可能值中&#xff08;选出一个使该观察值出现的概率为…

Java8新特性, 函数式编程及Stream流用法大全

用了多少年的java8了&#xff0c;Lambda表达式和stream流也经常用&#xff0c;但是也仅限于某些用法比较熟练&#xff0c;看见了 Function、Consumer 等函数式接口还是一脸懵逼&#xff0c;现在来全面总结一下java8这些新特性&#xff0c;也为自己后续查找做个备忘。如果你只是…