7-Spring cloud之路由网关zuul

news2024/11/24 20:30:16

7-Spring cloud之路由网关zuul

  • 1. 前言
  • 2. 关于zuul
    • 2.1 zuul基本原理
    • 2.2 为什么要使用zuul
  • 3. 搭建zuul
    • 3.1 项目结构
    • 3.2 基本配置
      • 3.2.1 pom文件
      • 3.2.2 yml文件
      • 3.3.3 启动类
    • 3.3 测试看效果
      • 3.3.1 演示
      • 3.3.1 架构图
  • 4. zuul路由访问映射规则
    • 4.1 映射服务提供者的服务名
    • 4.2 访问加前缀
  • 5.

1. 前言

  • 本文又是续接前文,所以下面有些集群或服务都不在介绍,比如Eureka集群还是在前面的基础上启动的,关于前面几篇文章的介绍如下:
    • 1-Eureka服务注册与发现以及Eureka集群搭建(实操型).
    • 2-Spring cloud之Eureka快速剔除失效服务
    • 3-Spring cloud之搭建Ribbon负载均衡——服务器上实操(上)
    • 4-Spring cloud之搭建Ribbon负载均衡——服务器上实操(下)
    • 5-Spring cloud之Feign的使用——服务器上实操.
    • 6-Spring cloud之Hystrix容错处理.

2. 关于zuul

2.1 zuul基本原理

  • 网关(Zuul) —— 本质核心就是过滤器 ( 就这样一句话其实就够了)

    这些过滤器可以完成以下功能:

    • 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
    • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成视图。
    • 动态路由:动态地将请求路由到不同的后端集群。
    • 压力测试:逐渐增加执行集群的流量,以了解性能。
    • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值得请求。
    • 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
    • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Balancing)使用的多样化,以及让系统的边缘更贴近系统的使用者。
    • 在实现了请求路由功能后,我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。但是,每个客户端用户请求为服务器应用提供的接口时,它们的访问权限往往都有一定的限制,系统并不会将所有的微服务接口都对它们开放。
    • 在完成了服务路由之后,我们对外开放服务还需要一些安全措施来保护客户端只能访问它应该访问到的资源。所以我们需要利用Zuul的过滤器来实现我们对外服务的安全控制。
  • 在服务网关中定义过滤器只需要继承ZuulFilter抽象类实现其定义的四个抽象函数就可对请求进行拦截与过滤。

  • 更多讲解参考下面的文章:
    微服务:网关(zuul) —— 基本原理、配置、鉴权、限制IP、限流.

2.2 为什么要使用zuul

  • 可以参考下面的文章
    Zuul入门实战(完整版).

3. 搭建zuul

3.1 项目结构

  • 如下:
    在这里插入图片描述

3.2 基本配置

3.2.1 pom文件

  • 如下:
    在这里插入图片描述

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.liu.susu</groupId>
            <artifactId>dog-cloud-parent</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>dog-gateway-zuul-8090</artifactId>
        <packaging>jar</packaging>
    
        <name>dog-gateway-zuul-8090</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.liu.susu</groupId>
                <artifactId>dog-api</artifactId>
                <version>${project.version}</version>
            </dependency>
    
            <!--zuul相关的-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <!--actuator监控-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!--容错hystrix-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
            </dependency>
            <!--下面这几个,版本同${spring-boot.version}-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    </project>
    
    

3.2.2 yml文件

  • 如下:
    在这里插入图片描述

    server:
      port: 8090  # #网关的端口号
    
    spring:
      application:
        name: dog-gateway-zuul # #网关在注册中心的唯一名称
    
    eureka:
      client:  # 客户端注册进eureka服务列表内
        register-with-eureka: true  # false表示不向注册中心注册自己
        service-url:
          defaultZone: http://62.234.14.112:2886/eureka/,http://58.87.88.142:2886/eureka,http://154.8.150.175:2886/eureka/
      instance:
        instance-id: dog-gateway-zuul-8090
    #    prefer-ip-address: true
    
    

3.3.3 启动类

  • 如下:

    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy  
    

    在这里插入图片描述

3.3 测试看效果

3.3.1 演示

  • 首先,启动Eureka集群,和服务提供者,然后启动zuul,我这里Eureka集群和服务提供者一直在服务器上没有停过,所以直接启动本地zuul,如下:
    在这里插入图片描述
  • 再确保直接访问服务提供者是通的,如下:
    在这里插入图片描述
  • 然后通过zuul访问,zuul还自带了负载均衡,如下:
    // http://zuul_host:zuul_port/微服务在Eureka 注册中心上的服务提供者(对应的application.name)/接口映射地址
    // 本地的话,如下3种访问均可
    
    http://localhost:8090/dog-provider/dog/getDogByNum/1
    http://127.0.0.1:8090/dog-provider/dog/getDogByNum/1
    http://192.168.1.101:8090/dog-provider/dog/getDogByNum/1
    
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.3.1 架构图

  • 简单架构,如下

在这里插入图片描述

4. zuul路由访问映射规则

4.1 映射服务提供者的服务名

  • 配置如下:
    在这里插入图片描述

    zuul:
      routes:
        zuulDog.serviceId: dog-provider   # dog-provider 是服务提供者的服务名
        zuulDog.path: /myDog/**
      #  ignored-services: dog-provider  #禁止通过此服务名访问,即 http://localhost:8090/dog-provider/dog/getDogByNum/1 不再可访问
      ignored-services: "*"   # 忽略多个微服务的情况
    
  • 访问效果如下:

    // http://localhost:8090/dog-provider/dog/getDogByNum/1   没映射前的访问,暴漏了服务提供者名
    http://localhost:8090/myDog/dog/getDogByNum/1   //myDog 随便映射
    

    在这里插入图片描述

4.2 访问加前缀

  • 如下:
zuul:
  routes:
    zuulDog.serviceId: dog-provider   # dog-provider 是服务提供者的服务名
    zuulDog.path: /myDog/**
#  ignored-services: dog-provider  #禁止通过此服务名访问,即 http://localhost:8090/dog-provider/dog/getDogByNum/1 不再可访问
  ignored-services: "*"   # 忽略多个微服务的情况
  prefix: /susu  # 加前缀

在这里插入图片描述

5.

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

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

相关文章

概率论的学习和整理--番外13:一个经典dubo模型的概率计算等

目录 1 经典模型知识科普 1.1 知识来源 1.2 下面是摘取的部分规则 2 这个经典dubo的概率和期望 2.1 网上计算的概率&#xff0c;期望全是负&#xff0c;赌徒悲剧 2.2 为什么会这样呢 3 假设把下注庄家不抽水&#xff0c;获得100%收益而不是95&#xff0c;多少次后可以赢…

桥梁监测需要哪些设备?

随着我国经济的发展&#xff0c;我国桥梁建设也迈上了新的台阶。截至2022年底&#xff0c;我国的公路桥梁总数达到了103.32万座。然而&#xff0c;随着在役桥梁使用时间的增长&#xff0c;承载能力受到荷载、环境以及结构退化等因素的影响&#xff0c;桥梁安全问题日益凸显。桥…

生成式AI管理规则落地 大模型后时代到来

国家网信办等七部门联合颁布的《生成式人工智能服务管理暂行办法》&#xff0c;给中国生成式AI产业树立了发展规范。 这份监管文件的用意并不止于管控&#xff0c;还用大量的笔墨传递出推动产业发展的原则&#xff0c;尤其强调“鼓励生成式人工智能技术在各行业、各领域的创新…

Unity 锚点 Anchors的通俗易懂详解

一、锚点Anchors是什么 当你在Canvas下建子物体的时候&#xff0c;选中子物体就会自带四个△&#xff0c;如下 这个三角也可以是分开的&#xff0c;如下 值得一提的是&#xff0c;这四个三角只能组成一个矩形&#xff0c;或者一个点&#xff0c;例&#xff08;矩形&#xff09…

YOLO数据集实现数据增强的方法(裁剪、平移 、旋转、改变亮度、加噪声等)

前言 最近我在做论文实验时从MSCOCO数据集中筛选了符合条件的1260张图片&#xff0c;但数据样本太少了&#xff0c;于是我就利用数据增强的方法实现了带标签的样本扩充&#xff0c;最后扩充为7560张图片。本文就来记录一下过程&#xff0c;有不懂的地方欢迎留言噢~ 目录 前言…

40.构造函数与析构函数

目录 1.构造函数 构造函数在以下情况被调用&#xff1a; 构造函数可以具有以下特点&#xff1a; 下面是一个简单的示例代码&#xff0c;展示了一个类的构造函数的定义和用法&#xff1a; 构造函数的特征 2.析构函数 析构函数的声明和定义如下&#xff1a; 以下是一…

信息安全-1网络信息安全概述

文章目录 一、概述1.1 网络安全现状 二、 网络信息安全现状与问题三、网络安全防御3.1 基本属性3.2 安全目标和功能 四、基本技术4.1 基本技术4.2 管理内容&方法4.2.3 管理要素&#xff1a; 五、信息安全管理流程六、法律法规 对网络安全和信息化工作作出重要指示 昨天突然…

OOM--除堆栈溢出外,其他几种溢出

从实践经验的角度出发&#xff0c;在处理小内存或者32位的应用问题时&#xff0c;除了Jaya堆和方法区之外&#xff0c;我们注意到下面这些区域还会占用较多的内存&#xff0c;这里所有的内存总和受到操作系统进程最大内存的限制: 直接内存:可通过-XX:MaxDirectMemorySize调整大…

CS 144 Lab Zero -- 可靠的内存字节流

CS 144 Lab Zero -- 可靠的内存字节流 环境搭建使用socket写一个网络程序In-memory reliable byte stream 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab 0 对应的PDF: Lab Checkpoint 0: networking warmup Lab 0 会省去Telnet部分内容。 环境搭建 Run Ubuntu ver…

模拟算法leetcode刷题

1)替换所有的问号: 1)模拟算法流程&#xff0c;一定要在草稿纸上过一遍流程 2)将流程转化成代码 1576. 替换所有的问号 - 力扣&#xff08;Leetcode&#xff09; class Solution {public String modifyString(String s) {char[] arrays.toCharArray();for(int i0;i<array.le…

去掉回车和换行符

1.工具用notePad 把Linux 等环境下的日志打印出来的sql 复制出来时包含换行符和回车符&#xff0c;无法直接在数据库客户端工具直接执行&#xff0c;需要去掉换行符和回车符。使用notepad 中的替换功能批量替换回车符和换行符。

6. 测试的分类以及黑盒测试、白盒测试和黑盒测试的区别

目录 1. 按照测试对象划分 1.1 界面测试 1.2 可靠性测试 1.3 容错性测试 1.5 兼容性测试 1.6 易用性测试 1.7 安装卸载测试 1.8 安全性测试 1.9 性能测试 1.10 内存泄漏测试 2. 按是否查看代码划分 2.1 黑盒测试&#xff08;Black-box Testing&#xff09; 优点 …

在 IDEA 中使用 Git 图文教程

Git 专栏索引&#xff1a; Git 分布式版本控制系统使用教程 在 IDEA 中使用 Git 图文教程 在 IDEA 中使用 Git 图文教程 &#x1f680;1. 配置 Git&#x1f680;2. 创建项目远程仓库&#x1f680;3. 初始化本地仓库&#x1f680;4. 连接远程仓库&#x1f680;5. 提交到本地仓库…

Python(二十三)运算符——赋值运算符

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

CityGML三维场景查看

今天我将展示如何读取 CityGML 文件并以 3D 方式查看其信息&#xff0c;以及如何通过挤出将shapefile转化为3D模型。 我还没有找到 3D 渲染器中可用设置的非常详细的描述&#xff0c;因此我花了一些时间测试它们。 我试图弄清楚它们的作用以及何时使用它们。 我将在本文末尾解…

英码积极参与行业交流活动,“快、易、省”赋能更多企业具备AI能力

2023年&#xff0c;ChatGPT的火爆引发了算力需求的大爆发&#xff0c;有人说&#xff0c;边缘计算因兼具时延低与安全等优势&#xff0c;或将成为解决AI算力紧张的良方&#xff1b;在人工智能产业发展的推动下&#xff0c;边缘计算成为了众人瞩目的焦点。随着应用场景的多元化和…

关于 华为云:服务器上传文件夹后显示403

问题原因&#xff1a; 华为云&#xff1a;当前使用的操作系统默认的umask 值是0027 上传文件后出现权限403 的问题&#xff1a; 解决1&#xff1a;修改 /etc/profile 文件 027 022 查看是否修改&#xff1a; 指令&#xff1a;umask 0022 需要删除之前的 文件重新上传&am…

【C语言】指针还不会?这一篇就够了

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在回炉重造C语言&#xff08;2023暑假&#xff09; ✈️专栏&#xff1a;【C语言航路】 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你…

HNU-计算机系统CS-学习感悟

本学期学的两门核心课&#xff0c;一个CS&#xff0c;一个OS。对我来说都有一定难度。 CS总评91/100。主要是期末考试没太发挥好&#xff0c; 主要原因是存储部分有个没有考虑写的情况&#xff0c;送了8分。 总领 CS的学习采用最经典的书——CSAPP&#xff0c;也被称为计算机…

vue3 ts vite electron开发桌面程序

1、搭建vuetsvite项目 # 创建Vue项目 npm init vue # 安装依赖 npm install # 一定要安装成开发依赖 npm install electron electron-builder -D 根目录创建plugins文件夹&#xff0c;文件夹中创建ts文件&#xff0c;vite.electron.build.ts是打包文件代码&#xff0c;v…