7-Spring cloud之路由网关zuul

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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面

原文&#xff1a;基于vue3pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面 基于vue3pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面 使用vue3pinia2开发仿制chatgpt界面聊天实例Vue3-Chatgpt 基于Vue3.xPinia2VueRouterVue3-Markdown等技术构建仿ChatGPT网页端聊天程序。支持经…

《动手学深度学习》(pytorch版本)中`d2lzh_pytorch`包问题

《动手学深度学习》&#xff08;pytorch版本&#xff09;中d2lzh_pytorch包问题

Redis安装与配置指南:适用于Windows、Mac和Linux系统的详细教程

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

opencv-07-感兴趣区域(ROI)

在图像处理过程中&#xff0c;我们可能会对图像的某一个特定区域感兴趣&#xff0c;该区域被称为感兴趣区 域&#xff08;Region of Interest&#xff0c;ROI&#xff09;。在设定感兴趣区域 ROI 后&#xff0c;就可以对该区域进行整体操作。 以下是一些 OpenCV ROI应用场景 …

华为认证的题库,不仅能考试,还能帮你提升技能

1、OSPF协议在哪种状态下确定DD报文的主从关系&#xff1f; A. 2-way B.Exchange C. ExStart D. Full 2、在VRP操作系统中&#xff0c;如何进入OSPF区域0的视图&#xff1f;A. [Huawei-ospf-1]area 0 B.[Huawei]ospf area 0 C. [Huawei-ospf-1]area 0 enable D. [Huawe…

Python批量实现Word、EXCLE、PPT转PDF文件

一、绪论背景 在日常办公和文档处理中&#xff0c;有时我们需要将多个Word文档、Excel表格或PPT演示文稿转换为PDF文件。将文档转换为PDF格式的好处是它可以保留文档的布局和格式&#xff0c;并且可以在不同平台上进行方便的查看和共享。 本篇博文将介绍如何使用Python编程语言…

服务机器人应用

随着时代的发展&#xff0c;机器人技术在各个领域越来越普及。在服务领域&#xff0c;服务机器人的应用也越来越受到人们的欢迎。服务机器人将会在商业、医疗、教育、酒店等领域得到应用&#xff0c;并成为未来发展的趋势。 在商业领域中&#xff0c;服务机器人可以承担很多工作…

鲸鱼优化算法MATLAB代码

论文 Seyedali Mirjalili,Andrew Lewis. The Whale Optimization Algorithm[J]. Advances in Engineering Software,2016,95.func_plot.m % This function draw the benchmark functionsfunction func_plot(func_name)[lb,ub,dim,fobj]Get_Functions_details(func_name);switch…

轮廓提取demo

note 步骤&#xff1a; 1.滤波(使用高斯核对原图卷积) 2.取梯度(使用sobel核对步骤1之后的图卷积得到x,y两个方向的梯度分量) 3.合成梯度图(x,y两个方向的梯度分量相加) 4.取梯度平方和矩阵(x*x y*y) 5.取八邻域掩膜(3x3矩阵) 6.根据掩膜&#xff0c;合成梯度图&#x…

2023最新版本Activiti7系列-事件篇

事件篇 事件&#xff08;event&#xff09;通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中&#xff0c;有两种主要的事件分类&#xff1a;*捕获&#xff08;catching&#xff09;与抛出&#xff08;throwing&#xff09;*事件。 捕获: 当流程执…

1haclon 简单操作

文章目录 *读取图片 read_image(Image,claudia) *转换为灰度 rgb1_to_gray(Image,GrayImage)阈值分割 区域连接 获取最衣服 *读取图片 read_image(Image,claudia) *转换为灰度 select_shape (Connection, SelectedRegions, area, and, 40963.3, 44724.8) rgb1_to_gray(Image,Gr…

TCP实现FTP功能

目录 server client makefile 运行顺序 FTP&#xff08;File Transfer Protocol&#xff09;是一种用于在计算机网络上传输文件的标准协议。 它允许用户通过网络将文件从一个计算机&#xff08;称为FTP服务器&#xff09;传输到另一个计算机&#xff08;称为FTP客户端&…

orbslam3 生成标定板rosrun kalibr kalibr_create_target_pdf --type

rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.08 --tspace 0.3小师妹要做相机视觉标定&#xff0c;需要制作棋盘格&#xff0c;无奈其电脑有些卡&#xff0c;对此毫无经验的博主从头开始安装&#xff08;此前博主已经安装了ROS环境&#x…

grpc --- protoc生成的pb.go文件的位置

目录 一、环境相关版本二、go_package配置为当前目录下三、go_package配置为指定目录四、结论 一、环境相关版本 go v1.20.5 protoc v4.24.0 protoc-gen-go v1.26.0protoc-gen-go版本过高时需要指定包名&#xff0c;即go_package 二、go_package配置为…

git rebase 合并提交

一. 合并提交步骤 git log --oneline 查看当前提交记录 git rebase -i HEAD~2 选择最后提交的2条记录进行合并进入编辑界面,将c865404的pick改为f, 表示向前合并也就是向cc5a54合并 编辑完之后:wq 保存并退出git rebase --continuegit push --force origin feature/v1.2 推送…

WEB阶段_CSSJS篇(附代码笔记)

&#xff08;一&#xff09;、使用DIVCSS布局首页 1、HTML的块标记 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><div>div1</div><div>div2</div><…

青岛大学_王卓老师【数据结构与算法】Week05_06_栈的顺序表示_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

No.2(3)——双指针算法实现平方数组排序

双指针算法指的是&#xff0c;从数组的两侧开辟指针变量进行查找&#xff0c;这类问题往往通过暴力&#xff08;双循环&#xff09;可以解出&#xff0c;而采用双指针相当于用空间换取时间&#xff0c;省略双层循环中重复的部分。 对于一个含有负数的有序数组&#xff0c;要求保…

一本通1910:【00NOIP普及组】计算器的改良题解

今天是编程集训的第二天&#xff0c;也是我来到CSDN整整1年。感谢所有阅读过我的文章的人&#xff0c;谢谢。 今天的比赛难度略低于昨天&#xff0c;但这道题也卡了我好久。 进入正题 题目&#xff1a; 题目描述&#xff1a; NCL是一家专门从事计算器改良与升级的实验室&a…

项目名称:智能家居边缘网关项目

一&#xff0c;项目介绍 软件环境: C语言 硬件环境: STM32G030C8TX单片机开发板 开发工具: Linux平台GCC交叉编译环境以及ukeil (1)边缘网关概念 边缘网关是部署在网络边缘侧的网关&#xff0c;通过网络联接、协议转换等功能联接物理和数字世界&#xff0c;提供轻量化的联接管…