微服务架构---认识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.xdnf.cn/news/1558260.html

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

相关文章

跨境卖家品牌出海要注意哪些方面

随着目前互联网的发展&#xff0c;市场由线下扩张到全国&#xff0c;再扩张到了全球&#xff0c;但是海外市场和国内并不相同跨境卖家品牌想要出海&#xff0c;需要注意多个方面&#xff0c;以确保能够在国际市场上成功立足并发展。以下是一些关键点&#xff1a; 首先想得拥有…

基于matlab的语音信号处理

摘要 利用所学习的数字信号处理知识&#xff0c;设计了一个有趣的音效处理系统&#xff0c;首先设计了几种不同的滤波器对声音进行滤波处理&#xff0c;分析了时域和频域的变化&#xff0c;比较了经过滤波处理后的声音与原来的声音有何变化。同时设计实现了语音的倒放&#xf…

【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量

ArkTS是HarmonyOS开发的编程语言 ArkTS语法中的变量 【语法格式】&#xff1a; let 变量名: 类型 值 let&#xff1a;是定义变量的关键字类型&#xff1a; 值数据类型&#xff0c; 常用的数据类型 字符型&#xff08;string&#xff09;、数字型&#xff08;number&#xf…

最新发布!Windows 11 24H2 纯净版:无捆绑,即刻升级!

今日&#xff0c;系统之家小编给大家带来最新的Windows11 24H2纯净版系统下载&#xff0c;该版本系统基于微软官方Windows11 24H2 26100.1882专业版进行离线制作&#xff0c;删除各种流氓软件&#xff0c;确保系统安全纯净&#xff0c;大家日常操作更放心。系统的兼容性出色&am…

人工智能的未来:从知识廉价时代到AI主导国家模式

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;知识的获取和使用正变得更加普及与廉价。这不仅引发了技术领域的深刻变革&#xff0c;也将对全球社会经济模式产生广泛影响。特别是在《时代》杂志对风险投资巨头维诺德科斯拉&#xff08;Vinod Khosla&#…

免费送源码:Apache+B/S+Springboot+MySQL 商城综合项目自动化系统 计算机毕业设计原创定制

摘 要 目前电商系统商城项目管理极其频繁,迫切地需要自动化测试来代替人工繁琐而又重复的劳动。自动化测试相关的研究已经很多,但多数只是针对某一方面,比如单一接口或者单一页面或者性能等,而缺乏将接口、页面、持续集成系统和缺陷管理系统整合的自动化测试平台。本研究采用混…

解决雪花ID在前端精度丢失问题

解决雪花ID在前端精度丢失问题 在现代分布式系统中&#xff0c;雪花算法&#xff08;Snowflake&#xff09;被广泛用于生成唯一的ID。这些ID通常是Long类型的整数。然而&#xff0c;当这些ID从后端传递到前端时&#xff0c;JavaScript的精度限制可能会导致精度丢失&#xff0c…

No.14 笔记 | XSS漏洞:原理、类型与防御策略

一、HTML和JavaScript基础 1. HTML基础 HTML概述&#xff1a;超文本标记语言&#xff0c;用于实现页面跳转和显示数据。结构标准&#xff1a;包括<!doctype html>声明文档类型&#xff0c;<html>根标签&#xff0c;<head>头部标签和<body>主体标签等。…

鸿鹄企业电子招投标采购系统视频详解|在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招标代理机构|招投标采购系统视频讲解

鸿鹄企业电子招投标采购系统视频详解|在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招标代理机构|招投标采购系统视频讲解 鸿鹄企业招投标采购系统视频讲解地址企业软件定制擅长跟我学习springcloud,honghu b2b2c,知识付费,等方面的知识,企业软件定…

了解网页 blob 链接

blob 链接 自从 HTML5 提供了 video 标签&#xff0c;在网页中播放视频变得非常简单&#xff0c;只要在代码中插入一个 video 标签&#xff0c;再将 video 标签的 src 属性设置为视频的链接就可以了。由于 src 指向的是视频文件真实的地址&#xff0c;所以当我们通过浏览器的调…

自动驾驶系列—从IMU到惯性定位算法:自动驾驶精准定位的幕后科技

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

ACM(Association for Computing Machinery)简介

ACM&#xff08;Association for Computing Machinery&#xff09;简介 ACM&#xff0c;全称为 Association for Computing Machinery&#xff0c;中文译作“计算机协会”&#xff0c;是全球历史最悠久、规模最大的计算机领域专业组织。成立于1947年&#xff0c;ACM致力于推动…

JavaEE一条龙学习----前端开发准备(二)

上一章为大家推荐了几款前端开发软件 我个人习惯使用VS Code Microsoft出品&#xff0c;轻量但强大&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器。可以在MacOS X、Windows和 Linux等操作平台使用。 具有对JavaScript、TypeScript和Node.js的内置支持&#xff0…

20.数据结构与算法-树和二叉树/满二叉树/完全二叉树/二叉树的性质/二叉树的存储结构

树的定义 树的其它表示方法 树的基本术语 树结构和线性结构的比较 二叉树的定义 二叉树案例引入 二叉树的抽象数据类型定义 二叉树的性质 两种特殊形式的二叉树 满二叉树 完全二叉树 完全二叉树的性质 二叉树的存储结构 二叉树的顺序存储 二叉树的链式存储结构 二叉链表 三叉链…

大数据新视界 --大数据大厂之 Hudi 数据湖框架性能提升:高效处理大数据变更

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

五款专业三维数据处理工具:GISBox、Cesiumlab、OSGBLab、灵易智模、倾斜伴侣深度解析

随着三维数据处理技术的广泛应用&#xff0c;尤其是在城市规划、地理信息系统&#xff08;GIS&#xff09;、工程监测等领域&#xff0c;处理倾斜摄影、三维建模以及大规模数据管理的需求日益增加。以下是五款我精心挑选的倾斜摄影和三维数据处理工具——GISBox、Cesiumlab、OS…

节后股票风险学习

说来惭愧&#xff0c;虽然股票搞了有5年&#xff0c;也一直亏钱&#xff0c;但从来不看技术指标&#xff0c;比较关注股票的历史价位。以前没啥钱只能买股价低的一些&#xff0c;后来努力打工存钱&#xff0c;可以买股价高的了&#xff0c;由于比较喜欢买龙头&#xff0c;像北方…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的酒店管理系统

开题报告 酒店管理是一个复杂而多样化的领域&#xff0c;涉及到酒店的日常运营、客户服务、房间预订、财务管理等诸多方面。随着科技的不断发展&#xff0c;传统的手工管理方式已经无法满足酒店业的需求。因此&#xff0c;开发一套高效、可靠的酒店管理系统变得至关重要。首先…

C++拾趣——绘制Console中DropdownMenu

大纲 居中显示窗口清屏并重设光标绘制窗口绘制窗口顶部绘制下拉行绘制下拉框选项绘制按钮行绘制窗口底部 修改终端默认行为对方向键的特殊处理过程控制Tab键的处理Enter键的处理上下左右方向键的处理 完整代码代码地址 这次我们要绘制下拉菜单&#xff0c;如下图。 居中显示窗口…

20241008深度学习动手篇

文章目录 1.如何写一个神经网络进行训练?1.1创建一个子类,搭建你需要的神经网络结构1.2 加载数据集1.3 自定义一些指标评估函数1.4训练1.5 结果展示 2.参考文献 1.如何写一个神经网络进行训练? 1.1创建一个子类,搭建你需要的神经网络结构 # File: 241008LeNet.py # Author:…