Spring Cloud Gateway微服务网关快速入门

news2024/11/27 13:46:40

介绍

Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控,和限流等。
在这里插入图片描述

  • 网关的配置可以和nacos集成实现动态路由配置,具体可以看我的另一篇文章:
    【Spring Cloud Gateway集成Nacos实现动态路由】
    在这里插入图片描述

工作原理

下图从总体上概述了Spring Cloud Gateway的工作方式:
在这里插入图片描述
客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑。

核心术语

  • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
  • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
  • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。

牛刀小试

下面以一个简单的例子展示Gateway的用法。完整代码看文章最后。

1. 创建网关服务microservice-gateway

  • 注意:Spring Cloud Gateway 不使用 Web 作为服务器,而是 使用 WebFlux 作为服务器 (本质是通过netty的io多路复用通信),Gateway 项目已经依赖了 starter-webflux,所以这里不要依赖 starter-web。
<dependencies>
<!-- spring cloud alibaba nacos discovery 依赖 -->
<!--<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>-->

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
  • 创建配置文件
server:
  port: 7000

spring:
  application:
    name: microservice-gateway
  cloud:
    gateway:
      routes:
        - id: router1 # 路由的ID
          uri: http://localhost:9000/user/{id} # 匹配后路由地址
          predicates: # 断言, 路径相匹配的进行路由
            - Path=/user/{id}

2.创建服务microservice-user

网关匹配后跳转到改服务接口。

<dependencies>
        <!-- 引入 Web 功能 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
  • 编写配置文件
server:
  port: 9000
  • 编写UserController
@RestController
public class UserController {
    @GetMapping("/user/{id}")
    public String hello(@PathVariable String id){
        return "Hello, user"+ id;
    }
}

3.测试

  • 启动microservice-gateway
  • 启动microservice-user
    谷歌浏览器访问:localhost:7000/user/2

在这里插入图片描述

项目源码

https://gitee.com/indexman/microservice-learn

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

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

相关文章

Kamiya丨Kamiya艾美捷人乳铁蛋白ELISA说明书

Kamiya艾美捷人乳铁蛋白ELISA预期用途&#xff1a; 人乳铁蛋白ELISA是一种高度灵敏的双位点酶联免疫测定&#xff08;ELISA&#xff09;人类生物样品中乳铁蛋白的测定。仅供研究使用。不用于诊断程序。 引言 乳铁蛋白&#xff08;LF&#xff09;是一种具有抗菌活性的多功能铁…

运动“双十一”持续走热,缤跃酒店洞察市场需求,创新打造运动健康酒店!

2022年“双十一”购物促销活动刚刚结束&#xff0c;各大品牌陆续开始展示肌肉&#xff0c;在众多数据中运动健身领域相关数据不容忽视&#xff0c;居家健身器械等商品持续走热&#xff0c;户外运动设备销售量也保持热度。由此可见&#xff0c;在当下全民运动热潮下&#xff0c;…

uniapp开发微信小程序实现语音识别,使用微信同声传译插件,

第一步&#xff1a;在微信小程序管理后台&#xff1a;“设置”-》“第三方设置”-》“插件管理”中添加插件。 但是这个地方&#xff0c;没有搜索到插件&#xff0c;就到微信服务市场 搜索到以后添加到需要的小程序里面&#xff0c;然后返回管理中心查看&#xff0c;就可以看…

Css3 3D转换

特点&#xff1a; 近大远小物体后面遮挡不可见 三维坐标系&#xff1a; 三维坐标系其实就是指立体空间&#xff0c;立体空间是由3个轴共同组成的。 X轴&#xff1a;水平向右为正 Y轴&#xff1a;垂直向下为正 Z轴&#xff1a;垂直屏幕向外为正 3D位移和3D旋转&#xff1a…

曲柄压力机的离合器和制动系统设计

目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1压力机发展的概况 1 1.2压力机工作原理 1 1.2.1压力机功能简介 1 1.2.2压力机的工作原理简介 3 1.3 压力机的分类 3 1.4 压力机的主要参数和型号 4 1.5本次设计压力机参数及内容 6 1.5.1主要技术参数 6 1.5.2设计内容 6 第二章 曲柄…

学妹居然叫我帮她P证件照自拍,结果发现.........

前因后果 事情是这样的 晚上我正在聚精会神写代码&#xff08;打游戏~&#xff09; 突然&#xff0c;收到学妹给我发来的消息 还有一张自拍照 而且是可以放在结婚证上的那种哦 原来是照片尺寸不合适 让我帮她修图。还要什么蓝底、红底各种背景的 效果 1、尺寸长宽调整为&…

有序数组转换为二叉查找树

问题描述 给定一个整数数组&#xff0c;其元素为先序排列&#xff0c;将其转换为高度平衡的二叉查找树。 示例 示例1 Input: nums [-10,-3,0,5,9] Output: [0,-3,9,-10,null,5] Explanation: [0,-10,5,null,-3,null,9] is also accepted: 示例2 Input: nums [1,3] Output: …

STM32实战总结:HAL之触摸屏

输入类设备简介 IO输入输出&#xff0c;是计算机系统中的一个概念。计算机的主要功能就是从外部获取数据然后进行计算加工得到目标数据并输出给外部&#xff08;计算机可以看成数据处理器&#xff09;。计算机和外部交互就是通过IO。每一台计算机都有个标准输入和标准输出。 常…

业务:财务会计业务知识

一、引言 会计是以货币为主要计量单位&#xff0c;对企业、事业、机关、团体及其他经济组织的经济活动进行记录、计算、控制、分析、报告&#xff0c;以提供财务和管理信息的工作。会计的职能主要是反映和控制经济活动过程&#xff0c;保证会计信息的合法、真实、准确和完整&a…

像素坐标和实际坐标的转换

文章目录像素坐标系图像坐标系小孔成像原理相机坐标系畸变参数像素坐标系 像素坐标系uov是一个二维直角坐标系&#xff0c;反映了相机CCD/CMOS芯片中像素的排列情况。原点o位于图像的左上角&#xff0c;u轴、v轴分别于像面的两边平行。像素坐标系中坐标轴的单位是像素&#xf…

新手python的自学总结(已拿到百度offer)

今天给大家分享一个小伙伴自学Python找到工作的文章。 先简单介绍一下小伙伴的情况。是非科班出身的&#xff0c;虽然高中读的是理科&#xff0c;但是进入大学学了一个文科专业&#xff0c;之后就再没接触过理工科的东西。对计算机也是一窍不通&#xff0c;大学才刚开始接触电…

Linux源码——启动流程1

主要 大概流程就是&#xff1a; 通电自检-----》bios----》bootloader —》内核。其中内核这部分是这篇主要的&#xff0c;通过bootloader初始化好一些条件&#xff0c;然后调用kernel_entry()开始正式进入内核之中&#xff0c;后面就是内核操作了&#xff0c;启动进程什么的…

Java知识点

Java浅拷贝 Java的深拷贝和浅拷贝 - YSOcean - 博客园 (cnblogs.com) Clone 是 Object 类中的一个方法&#xff0c;通过对象A.clone() 方法会创建一个内容和对象 A 一模一样的对象 B&#xff0c;clone 克隆&#xff0c;顾名思义就是创建一个一模一样的对象出来&#xff08;浅…

如何确保海外服务器的高可用性?

服务器正常运行时间和站点可用性是每个企业的首要任务。但对于那些通过在线业务盈利的公司来说&#xff0c;确保可靠性是最重要的。然而&#xff0c;任何意外停机都是有代价的&#xff0c;而硬件故障是最常见的原因。不过好在这也是可以预防的。那么&#xff0c;如何确保海外服…

怎样把网页上的音频转换成mp3格式?试试这几个转换方法

大家平时喜欢听音乐吗&#xff1f;我经常会在网上保存一些不错的音频到设备上&#xff0c;这样子就方便我可以随时播放了。那你们有遇到过该音频格式不支持播放的情况吗&#xff1f;这种情况是因为播放器兼容的音频格式比较少&#xff0c;需要我们将音频格式转换成播放器兼容的…

如何发现Python依赖库漏洞

因为python编程的流行&#xff0c;python的各种库也越来越多&#xff0c;但许多小伙伴可能只注意到了自己编程所要依赖的环境&#xff0c;但是却忽略了库的版本也有可能存在漏洞的风险&#xff0c;如果不及时检查和更新python依赖库&#xff0c;那么很有可能你写的代码本身就存…

[附源码]SSM计算机毕业设计医院药房管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

《500强高管谈VE》-以VE ORIENTED管理为目标

文章出处&#xff1a;日本VE协会杂志文章翻译&#xff1a;泰泽项目部 关注泰泽&#xff1a;实现高利润企业《500强高管谈VE》-以VE ORIENTED管理为目标 作者&#xff1a;代表董事兼副社长近藤一 以阪神大地震为首的诸多事件等&#xff0c;社会动荡中&#xff0c;经济的动向也以…

HTML + CSS 实现矩形/圆形进度条效果 - SVG

本文记录通过 HTML CSS 部分原生 JS 使用 SVG 嵌入 HTML 文档的用法实现常见的圆形和矩形进度条效果&#xff0c;效果图如下&#xff1a;&#xff08;实际运行效果是进度条从 0 过渡到一个目标值比如 100%&#xff09; 下面直接上代码&#xff1a; 圆形 HTML&#xff1a;线…

【数据结构】第七章 图

1.单选(2分) 已知一个有向图的邻接矩阵表示&#xff0c;要删除所有从第i个结点发出的边&#xff0c;操作为&#xff08; &#xff09;。 ‏A.将邻接矩阵的第i列删除 B.将邻接矩阵的第i行元素全部置为0 C.将邻接矩阵的第i列元素全部置为0 D.将邻接矩阵的第i行删除 2.单选(2分)…