微服务架构---认识Zuul

news2024/11/26 16:53:51

目录

  • 认识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.coloradmin.cn/o/2201882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

别再浪费时间!利用ChatGPT写作提效神器,赶紧收藏!

在信息化迅猛发展的当下&#xff0c;写作已成为我们日常中不可或缺的组成部分。论是在撰写报告、进行学术论文创作&#xff0c;还是写博客内容&#xff0c;写作都是我们思想和观点的核心手段。然而&#xff0c;写作非易事&#xff0c;它常需要我们付出大量的时间和精力。那么&a…

Superset SQL模板使用

使用背景 有时想让表的时间索引生效&#xff0c;而不是在最外层配置报表时&#xff0c;再套多一层时间范围。这时可以使用SQL模板 参考官方文档 https://superset.apache.org/docs/configuration/sql-templating/#:~:textSQL%20Lab%20and%20Explore%20supports%20Jinja 我…

vscode中的Code Runner配置----output中文乱码(设置默认使用cmd运行文件)、设置当前文件夹为根路径

问题描述 1. 存在中文显示异常&#xff0c;以及输出用Output输出的问题 解决方法&#xff1a; 把终端改为 cmd。如果是就不用替换了 修改RunCode的配置 完成&#xff0c;下面点击 run code就在cmd中运行了 2. 设置当前文件夹为根路径 code runner 的默认根路径是当前项目…

C#中Assembly3个获取路径的方法

在C#中&#xff0c;经常要获取路径 &#xff0c;可以通过Assembly的三个重载方法来获取&#xff0c;如下所示这三个分别是GetCallingAssembly、GetEntryAssembly和GetExecutingAssembly。 string tmpEntryPath Assembly.GetEntryAssembly().Location;string tmpExeasmPath As…

嵌入式面试——C语言和数据结构篇(二)

本篇为C语言和数据结构篇&#xff08;二&#xff09; 1、关键字static的作用是什么&#xff1f; 答&#xff1a; 在C语言中&#xff0c;关键字static有三个明显的作用&#xff1a; 1>在函数体&#xff0c;一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2&…

深度解读数字化转型的核心驱动因素与实践指南从战略到落地

数字化转型的战略重心 在当今商业环境中&#xff0c;数字化转型不仅是企业提升效率的工具&#xff0c;更是创造竞争优势的必要条件。随着技术的飞速发展&#xff0c;企业在面对市场动态变化时&#xff0c;依赖于其数字化基础设施、数据处理能力以及对新技术的敏捷反应能力&…

嵌入式面试——FreeRTOS篇(六) 任务通知

本篇为&#xff1a;FreeRTOS 任务通知篇 任务通知简介 1、任务通知介绍 答&#xff1a; 任务通知&#xff1a;用来通知任务的&#xff0c;任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需要另外创建一个结构体&#xff0c…

【JAVA开源】基于Vue和SpringBoot的高校学科竞赛平台

本文项目编号 T 075 &#xff0c;文末自助获取源码 \color{red}{T075&#xff0c;文末自助获取源码} T075&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 教…

如何使用DAMODEL进行AI开发教程

DAMODEL&#xff1a;DAMODEL 目前DAmodel注册并实名赠送50大洋的免费额度&#xff0c;搭载4090的服务器费用不到2r/h 教程&#xff1a; 完成注册并实名后 在此点击创建实例 选择实例配置 选择镜像&#xff0c;看你使用哪种dl框架 设置完毕后创建密钥并选择该密钥。 创建…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

论文阅读笔记-Self-Attention

前言 Self-Attention能够将每个元素和当前时刻元素进行比较来确定上下文元素的重要性,这也使得它在NLP模型中表现优异。而本篇文章则是将卷积结构与Self-Attention结构进行了比较,通过 实验证明了这样的卷积结构同样有着高效的计算和足以和Self-Attention媲美的效果。本篇文…

【AAOS】Android Automotive 9模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r61 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch aosp_car_x86_64-userdebug make -j8 运行效果 emulator Home界面 MAP All apps S…

python爬虫 - 数据提取

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、数据类型及其对应的提取策略 &#xff08;一&#xff09;文本数据 &…

网约巴士订票系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;巴士信息管理&#xff0c;积分兑换管理&#xff0c;积分纪录管理&#xff0c;新闻信息管理&#xff0c;基础数据管理 微信端账号功能包括&#xff1a;系统…

国产长芯微LDC8531低功耗轨到轨输出 16 位串行输入数模转换器完全P2P替代DAC8531

描述 LDC8531是一款低功耗、单16位缓冲电压输出数模转换器&#xff08;DAC&#xff09;。其片上精密输出放大器允许实现轨到轨输出摆动。LDC8531使用多功能三线串行接口&#xff0c;其时钟频率高达30MHz&#xff0c;与标准SPI、QSPI、Microwire和数字信号处理器&#xff08;DSP…

数据库迁移中的权限问题及解决方法——以Error 1142为例

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

无线领夹麦克风哪个降噪好?选购领夹麦克风需注意的五大隐藏风险

不知道大家有没有遇到这样一个情况&#xff0c;为什么有些视频或直播的声音听起来那么清晰&#xff0c;仿佛身临其境&#xff0c;而自己拍的视频却总是嘈杂不堪&#xff0c;尤其是在户外拍摄的时候&#xff0c;音频中更是充斥着各种各样的噪音。这种问题主要还是麦克风的原因所…

3dmax笔记-ALT X 透明度设置

1 降低max的模型的透明度 ALTX 看区别 区别对比

Sentinel最全笔记,详细使用步骤教程清单

一、Sentinel的基本功能 1、流量控制 流量控制在网络传输中是一个常用的概念&#xff0c;它用于调整网络包的发送数据。然而&#xff0c;从系统稳定性角度考虑&#xff0c;在处理请求的速度上&#xff0c;也有非常多的讲究。任意时间到来的请求往往是随机不可控的&#xff0c;…

分辨率提高4到8倍!AI高清修复工具-upscayl使用方法!

你还在为手中的模糊照片苦恼吗&#xff1f; 是不是想把老照片或低分辨率的图片用于大尺寸印刷&#xff0c;却因为画质糟糕而无从下手&#xff1f; 现在你不再需要高深的Photoshop技能&#xff0c;也不用花费巨资找人修图。借助AI高清修复工具Upscayl&#xff0c;只需几秒钟&am…