当前位置: 首页 > news >正文

微服务SpringGateway解析部署使用全流程

官网地址: Spring Cloud Gateway

目录

1、SpringGateway简介

1、什么是网关

2、为什么用网关【为了转发】

2、应用:

1.启动nacos

2.创建网关项目

3.网关配置1

4.网关配置2【了解】

5.过滤器配置【了解】


1、SpringGateway简介

核心功能有三个:

  • 路由:用于设置转发地址的

  • 断言:用来判断真实应该请求什么地址

  • 过滤器:可以过滤地址和处理参数

1、什么是网关

网关是后台服务的统一入口,类似于平时网络里提到的网关。

2、为什么用网关【为了转发】

在微服务架构开发中,网关是必要有的服务,它可以统一入口,解决跨域,负载均衡,各微服务通信等微服务整体管理和通信的。

场景:如果没有网关,前台要查用户信息,先往user的微服务下发送请求。然后又要查学生的信息,再往student的微服务下发送请求。这样的话,我要知道所有的微服务,他们的ip是什么?他们的端口是什么?才能把请求发送到他们的里面。那对于前端来讲的话,他要管理的微服务就太多了。而且还有一个问题,前端这么做,它是没有负载均衡的。它不知道我究竟应该发给谁?比如说user这个服务现在搭建了集群有三个,那请求过来了,我究竟是往集群里的哪一个发送呢?对于前端来说也是不知道的。

后台为了解决这个问题,就是你别搞这么复杂了,发送请求的时候都往一个地址发,但是url不一样。至于跳到哪个微服务,我后台来解决。Gateway就是专门来处理这个事的。在网关里面 集成了负载均衡 咱们就不用考虑这集群起来的微服务该给哪一个发了。

对于前端来讲,它发的不是网关的请求地址,而是nginx 的请求地址。发送到nginx地址后,再通过反向代理,代理到网关上。所以对于前端来说,只需要知道nginx就可以了,网关是不暴露给前端的。

一般来说都会为网关建立一个单独的微服务。

2、应用:

1.启动nacos

2.创建网关项目

【2.1添加pom.xml依赖】

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version><spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Finchley.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins></build>

【2.2】创建启动类:

@SpringBootApplication
public class SpringBootMain {public static void main(String[] args) {SpringApplication.run(SpringBootMain.class,args);}
}

【注意】

网关是一个非常干净的工程,不会添加其它中间件的配置,所以网关工程里只有一个Application的启动类和配置文件。

启动类的注解@SpringBootApplication注解中可能开启的其它中间件的@EnableXXX,可以把其它中间件的注解排除掉,保证网关只启动自己的应用,只完成网关功能。

# 如果导入别人的项目,依赖是有传递性的这样你的项目里依赖的中间件就会很多,可以通过exclude属性排除掉。这样其他的中间件就不会启动了。
@SpringBootApplication(exclude = {XXXX.class, YYYY.class})

【2.3】编写bootstrap.yml配置文件

spring:cloud:nacos:discovery:server-addr: 192.168.146.128:8848config:server-addr: 192.168.146.128:8848inetutils:preferred-networks: 192.168.146

查看端口号

【2.4】编写application.properties配置文件

spring.application.name=gateway
server.port=300

创建一个页面来进行测试   【注意要建立index.html页面】要在static包下

【2.5】启动项目

3.网关配置1

删除页面

网关配置官方文档: Spring Cloud Gateway

【3.0】改动:

   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>compile</scope></dependency>
修改为:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><scope>compile</scope></dependency>

【3.1】添加依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><scope>compile</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

【3.2】添加application.yml 配置文件:

spring:cloud:gateway:routes:- id: baidu_routeuri: https://www.baidu.compredicates:- Query=baidu

spring:
   cloud:
     gateway:
       routes:
         - id: baidu_route(路由id唯一,是一个数组,可以配置多个路由)
           uri: https://www.baidu.com(路由到的地址)
           predicates:(断言)
             - Query=url, baidu(如果存在url和baidu,那么跳转到uri地址)

【3.3】启动项目:

http://localhost:300/baidu不会跳转到百度,http://localhost:300/baidu?baidu才会跳转到百度,是根据参数做断言。?后面的值下图

输入正确跳到页面

【如果导入gateway依赖报错,试着修改下面的的java版本】

4.网关配置2【了解】

  1. The Path Route Predicate Factory

Path路由断言工厂接受一个参数:采用Spring PathMatcher 模式。

spring:
  cloud:
    gateway:
      routes:
          - id: path_route
          uri: https://example.org
          predicates:
            - Path=/red/{segment},/blue/{segment}

请求需要以red或者blue结尾,后面的参数会路由过去 例如:/red/1 ,/red/blue ,/blue/green等。

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Path=/red/**

5.过滤器配置【了解】

##公式模板
- id: third_party_route
  uri: lb://service-name
  predicates:
    - Path=/url1/url2/urln/**
  filters:
    - RewritePath=/url1/url2/urln/(?<segment>/?.*),/$\{segment}
    

##例子代码
spring:
  cloud:
    gateway:
      routes:
        #用户中心
        - id: user-route
          uri: lb://user
          predicates:
            - Path=/api/services/user/**
          filters:
            - RewritePath=/api/services/user/(?<segment>/?.*),/user/$\{segment}

id:取一个名字,自定义,见名知意,不要有下划线(规约)

uri:接收请求后真实转发的地址,lb:开头代表用负载均衡的方式找注册中心名字叫user服务的微服务

predicates:请求地址是以/api/services/user/开头,后接任意字符

filters:将请求地址重写成:/user/+参数/方法等

相关文章:

微服务SpringGateway解析部署使用全流程

官网地址&#xff1a; Spring Cloud Gateway 目录 1、SpringGateway简介 1、什么是网关 2、为什么用网关【为了转发】 2、应用&#xff1a; 1.启动nacos 2.创建网关项目 3.网关配置1 4.网关配置2【了解】 5.过滤器配置【了解】 1、SpringGateway简介 核心功能有三个&…...

Solidity 存储和内存管理:深入理解与高效优化

在 Solidity 中&#xff0c;存储和内存管理是编写高效智能合约的关键组成部分。合约执行的每一步操作都可能涉及到数据的存储和读取&#xff0c;而这些操作对 gas 的消耗有很大影响。因此&#xff0c;理解 Solidity 的存储模型以及如何优化数据的管理对于合约的安全性、性能和成…...

机器学习篇-day02-KNN算法实现鸢尾花模型和手写数字识别模型

一. KNN简介 KNN思想 K-近邻算法&#xff08;K Nearest Neighbor&#xff0c;简称KNN&#xff09;。比如&#xff1a;根据你的“邻居”来推断出你的类别 KNN算法思想&#xff1a;如果一个样本在特征空间中的k 个最相似的样本中的大多数属于某一个类别&#xff0c;则该样本也属…...

【C++】STL--vector

1.vector的介绍 我们先来看看vector的文档介绍&#xff0c;实际中我们只要熟悉相关接口就好了。 成员函数 使用STL的三个境界&#xff1a;能用&#xff0c;明理&#xff0c;能扩展 &#xff0c;那么下面学习vector&#xff0c;我们也是按照这个方法去学习 2 vector的使用 v…...

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库&#xff0c;即非关系型数据库&#xff0c;具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中&#xff0c;Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教…...

严重 Zimbra RCE 漏洞遭大规模利用(CVE-2024-45519)

攻击者正在积极利用 CVE-2024-45519&#xff0c;这是一个严重的 Zimbra 漏洞&#xff0c;该漏洞允许他们在易受攻击的安装上执行任意命令。 Proofpoint 的威胁研究人员表示&#xff0c;攻击始于 9 月 28 日&#xff0c;几周前&#xff0c;Zimbra 开发人员发布了针对 CVE-2024-…...

php函数积累

对称函数 isset 判断数组arr中是否存在键key 返回值true/false isset(name,$arr) unset 删除数组中的键 需存在key不然抛出异常 unset($arr[name]) json_encode 数据转json格式 json_encode($arr) 一般形式 指定字符编码形式 json_decode json格式转原有数据格式 json_d…...

前端项目场景相关的面试题,包含验证码、图片存储、登录鉴权、动态路由、组件划分等项目场景实际的面试题

项目场景面试题 如何防止短信验证码被刷 问题场景 添加倒计时和图片滑动验证&#xff0c;避免不必要的资源浪费 发送短信验证码需要费用发送短信消耗服务器资源 公司的图片、视频、文件资源如何存储的 传统模式 分开存储到数据服务器&#xff0c;托管服务器到云端 缺点&…...

uniapp 上了原生的 echarts 图表插件了 兼容性还行

插件地址&#xff1a;echarts - DCloud 插件市场 兼容性这块儿不知道后期会不会支持其他浏览器 H5 的话建议可以用原生的不用这个插件...

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题&#xff1a;基于POI数据的站点综合评价——以厦门市为例&#xff08;三&#xff09; 什么是优劣解距离法&#xff08;TOPSIS&#xff09;&#xff1f; 优劣解距离法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff0c;简称TOPSI…...

sentinel原理源码分析系列(二)-动态规则和transport

本文是sentinel原理源码分析系列第二篇&#xff0c;分析两个组件&#xff0c;动态配置和transport 动态规则 Sentinel提供动态规则机制&#xff0c;依赖配置中心&#xff0c;如nacos&#xff0c;zookeeper&#xff0c;组件支持动态配置&#xff0c;模板类型为规则&#xff0c;支…...

ubuntu切换源方式记录(清华源、中科大源、阿里源)

文章目录 前言一、中科大源二、清华源三、阿里源 前言 记录ubunut切换各个源的方式。 备注&#xff1a;更换源之后使用sudo apt-get update更新索引。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、中科大源 地址&#xff1a;https://mirrors.u…...

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言&#xff1a; 本文详细讲解了关于ArkTs语言中的泛型&#xff0c;其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法&#xff0c;补充了一部分接口相关的知识&#xff0c;包括接口的继承和具体实现&#xff0c;也写到了一些边边角角的小知识&#xff0c;剩…...

2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制…...

基于多维统计分析与GMM聚类的食品营养特征研究

1.项目背景 在当今社会&#xff0c;随着人们对健康和营养的日益关注&#xff0c;深入了解食品的营养成分及其对人体的影响变得越来越重要&#xff0c;本研究采用了多维度的分析方法&#xff0c;包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型&#xff08;GMM&am…...

SkyWalking 告警功能

SkyWalking 告警功能是在 6.x 版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。 告警规则 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。Webhook(网络钩子):定义当警告触发时,哪些服务终端需要被告知。常用告警规则 …...

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下&#xff0c;国内旅游更是呈现出蓬勃的发展态势。中国&#xff0c;这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地&#xff0c;为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力&#xff0c;深入剖…...

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合&#xff0c;这是因为工科要求都必须是8开头的专业课&#xff0c;里面参考课本还是没变的&#xff0c;无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…...

【Linux】进程管理:状态与优先级调度的深度分析

✨ 山海自有归期&#xff0c;风雨自有相逢 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1…...

同轴电缆笔记

同轴电缆笔记 射频同轴电缆的阻抗标准为什么是50Ω或75Ω呢&#xff1f; 在PCB设计中&#xff0c;在合理的范围内&#xff0c;传输线阻抗的具体数值并不重要。只要控制好整条传输线的阻抗&#xff0c;不要出现阻抗不连续的情况就好了。设计中的其他因素往往决定了我们用什么样…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现&#xff0c;包括选择排序、冒泡排序、插入排序、快速排序和归并排序&#xff0c;以及每种算法的特点和复杂度分析 1. 选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每次从未排序部分选择最小元素&#xff0c;与未排…...

Java设计模式:责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种 行为型设计模式&#xff0c;它通过将请求沿着一条处理链传递&#xff0c;直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者&#xff0c;…...