SpringCloud核心组件(五)

文章目录

  • Gateway
    • 一. 概述简介
      • 1. Gateway 是什么
      • 2. 什么是网关?
      • 3.Gateway 和 Nginx 两个网关的区别
        • 什么是流量入口?
      • 4.Gateway 能干嘛
      • 5.gateway 三大核心概念
      • 6.运行方式
    • 二. 入门案例
      • a.创建gateway模块,在pom.xml中引入依赖
      • b.创建启动类GatewayApplication
      • c.创建配置文件配置gateway与nacos
      • d. 访问测试
    • 三. 总结

Gateway

官网

一. 概述简介

1. Gateway 是什么

Spring Cloud Gateway是 Spring 官方基于 Spring Boot 2.x、Spring WebFlux 和 Project Reactor 构建的网关Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的 API路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 ZUUL,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

2. 什么是网关?

网关(Gateway)又称网间连接器,网关在网络层实现服务之间网络互连。用程序的话来说就是请求转发。他就好比小区的门一样,你想进来小区,必须通过门才能进来。为什么要有这个门?为了方便管理以及安全考虑,就好比现在疫情期间,动不动小区封了,假如小区没有门,想要封小区还得费特别大的劲将小区给围住。

再回到程序当中,现在非常流行微服务系统,将整体应用拆分为了多个模块,那么问题来了,前端页面肯定会涉及到调用不同微服务的接口,一个微服务就代表着一个端口的应用,每个微服务都是独立的,那么前端在调用的时候不可能将访问地址设置成多个呀。设置成多个当然也可以,弊端就是开发过程当中我们涉及到环境(域名服务器 ip)的切换,那还得改多个,因此网关为解决这个问题而生,网关可以将多个微服务访问的地址进行聚拢起来,你要访问哪个微服务的接口,直接访问网关,网关负责给你转发到对应的微服务地址上,因此前端只需要知道网关的地址服务地址就可以了。

3.Gateway 和 Nginx 两个网关的区别

在学习 Gateway 网关的时候很容易联想到 Nginx,甚至刚接触的时候会好奇很多架构图上面 画的两个网关竟然都用到了,那么他们两个到底有什么关联性?

下图当中圈出来的就是 Gateway 所在的位置。而 Nginx 属于在 Gateway 上层。甚至可以在外部请求的上层,因为 Nginx 可以用来做网关层的负载均衡,同时他还可以用来做流量入口。因为他本身就是服务器,实际开发当中都是通过 Nginx 来做流量入口的。

什么是流量入口?

流量入口的意思就是假如我有个 html 放到 linux 当中,那么外面的人怎么才能访问到 linux 当中的页面呢?Nginx 可以用来解决这个问题,他本身就是一个服务器,使用过程就是开启端口然后监听请求,当请求来了,可以将请求 指向本机的任意可访问的html文件

20241115191142

Gateway 可以称之为微服务网关(业务网关),而 Nginx 可以作为整个应用的流量网关,以及微服务网关的负载均衡。业务网关针对具体的业务需要提供特定的流控策略、缓存策略、鉴权认证策略等等。流量网关通常只专注于全局的 Api 管理策略,比如全局流量监控、日志记录、全局限流、黑白名单控制、接入请求到业务系统的负载均衡等,有点类似防火墙。Kong 就是典型的流量网关。

  1. nginx 是用 C 语言写的,自定义扩展的话,要么写 C 要么写 lua
  2. gateway 是 java 语言的一个框架,可以在框架上进行代码的扩展与控制,例如:安全控制,统一异常处理,XXS,SQL 注入等;权限控制,黑白名单,性能监控,日志打印等;

4.Gateway 能干嘛

  • 反向代理
  • 鉴权
  • 限流
  • 熔断
  • 日志监控

5.gateway 三大核心概念

  • Route(路由):路由是构建网关的基本模块,它由 ID,目标 URI,一系列的断言和过滤器组成,如果断言为 true 则匹配该路由。
  • Predicate(断言):参考的是 Java8 的 java.util.function.Predicate,开发人员可以匹配 HTTP 请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。
  • Filter(过滤):指的是 Spring 框架中 GatewayFilter 的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

web 请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。

predicate 就是我们的匹配条件;
而 filter,就可以理解为一个无所不能的拦截器,可以在执行前后来执行自己的逻辑,有了这两个元素,再加上目标 uri,就可以实现一个具体的路由了

6.运行方式

20241115191354

客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler

Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。
过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。

Filter 在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

核心逻辑: 路由转发+执行过滤器链

二. 入门案例

假如我有个 8080 端口的服务,然后他有两个接口 8080 和 9527,但是我又不想让别人通过 8080 端口访问,我想让他通过 9527 访问怎么办?很简单通过 Gateway 搭建一个网关服务即可解决该问题。

  1. 创建 SpringBoot 工程 gateway,引入网关依赖
  2. 编写启动类
  3. 编写基础配置:服务端口,应用名称
  4. 编写路由规则
  5. 启动网关服务进行测试

a.创建gateway模块,在pom.xml中引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<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.nianxi</groupId><artifactId>springNacos_demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>gateway</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--nacos服务注册发现依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--gateway依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>
</project>

b.创建启动类GatewayApplication

package com.nianxi;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author Jie.* @description: TODO* @date 2024/11/15* @version: 1.0*/
@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}

c.创建配置文件配置gateway与nacos

server:port: 8080
spring:application:name: gatewaycloud:nacos:discovery:server-addr: 192.168.146.128:8848gateway:routes:- id: user-service # 路由标识,必须唯一uri: lb://userService # 路由转发地址,lb代表负载均衡predicates: # 断言,判断请求是否满足条件- Path=/user/** # 请求路径匹配- id: order-serviceuri: lb://orderServicepredicates:- Path=/order/**

d. 访问测试

20241115194801

三. 总结

20241115194826

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

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

相关文章

【JavaScript】LeetCode:96-100

文章目录 96 单词拆分97 最长递增子序列98 乘积最大子数组99 分割等和子集100 最长有效括号 96 单词拆分 动态规划完全背包&#xff1a;背包-字符串s&#xff0c;物品-wordDict中的单词&#xff0c;可使用多次。问题转换&#xff1a;s能否被wordDict中的单词组成。dp[i]&#x…

maven的optional选项说明以及具体应用

写在前面 本文看下maven的optional选项的作用和用法。 1&#xff1a;什么作用 考虑这样的场景&#xff0c;A依赖B&#xff0c;B依赖C&#xff0c;正常的按照依赖的传递性&#xff0c;A也会间接的依赖C&#xff0c;但是在一些特定的场景中项目A只希望依赖B&#xff0c;而不依…

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…

【强弱分界】,股市动态多维波动 精准辅助工具 源码

该策略结合了多重技术指标&#xff0c;旨在通过高低点的动态波动分析&#xff0c;提供精准的买入、卖出信号及市场强弱判断。 本策略适用于&#xff1a; 中短期股市交易者&#xff0c;帮助判断市场的进出场时机。 高频交易和量化交易系统中的信号生成模块。 在波动较大的市场…

【IEEE出版 | 中国石油大学(华东)主办】第六届信息与计算机前沿术国际学术会议(ICFTIC 2024,12月13-15日)

第六届信息与计算机前沿术国际学术会议(ICFTIC 2024) 2024 6th International Conference on Frontier Technologies of Information and Computer 官方信息 会议官网&#xff1a;WWW.ICFTIC.ORG 2024 6th International Conference on Frontier Technologies of Information…

如何在SM30生成的维护表中增加选择框 CheckBox

用户想要在屏幕中显示选择框进行维护&#xff0c;如下图&#xff1a; 很简单&#xff0c;先通过 SE11 定义一个 CHAR1 类型的字段名&#xff0c;然后通过使用程序转到表维护生成器 进入到概述屏幕&#xff0c;双击&#xff0c;然后进入到屏幕布局&#xff1a; 先删除原来通过系…

极客争锋 智连未来 TuyaOpen Framework极客创意大赛正式开启

TuyaOpen Framework极客创意大赛正式开启 可选择基于: TuyaOpen Framework 原生开源包: https://github.com/tuya/tuyaopen 支持 Ubuntu/T2/T3/T5/ESP32/ESP32C3等多款芯片TuyaOpen Arduino:https://github.com/tuya/arduino-tuyaopen支持 T2/T3/T5等多款芯片TuyaOpen LuaNode…

麒麟kysec安全

一、kysec安全框架管理 开启kysec getstatus Copy security-switch --set default Copy 重启系统 reboot Copy 刷新页面&#xff0c;等待几分钟&#xff0c;即可完成文件的扫描。 查看kysec状态 getstatus Copy 切换到管理员身份&#xff08;密码&#xff1a;devuser…

c++ 左值、右值、左值引用()、右值引用(),移动构造和std::move

左值和右值 不是等于号的左边和右边 &#xff01;&#xff01;&#xff08;一部分场景下是这样&#xff09; 右值可以描述成一个临时值 c 左值、右值、左值引用、右值引用&& 左值右值左值引用右值引用结论 第二弹~ 你可以完全不看上面的解释移动语义移动构造和move 左…

黑马嵌入式开发入门模电基础学习笔记

学习视频: 黑马程序员嵌入式开发入门模电&#xff08;模拟电路&#xff09;基础 文章目录 背景介绍电流电压组件仿真三极管ne555PCBEDA案例&#xff1a;非接触式电笔案例&#xff1a;电子琴 背景介绍 电流 电压 组件 仿真 三极管 mos管 ne555 PCB EDA 案例&#xff1a;非接触…

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

目录 一、问题产生 二、问题分析 三、解决方法(2种) 一、问题产生 在服务器上使用新的Tomcat9(绿色版ZIP),打开一个cmd窗口后,将路径定位到“tomcat\bin\”目录,运行“startup.bat”。程序会自动打开一个新窗口,这个是Java程序的运行窗口,但是里面的中文全是乱码,如…

Neo4j Desktop 和 Neo4j Community Edition 区别

Neo4j Desktop 和 Neo4j Community Edition 的主要区别在于它们的用途、功能以及安装和管理方式。以下是这两者的详细对比&#xff1a; 1. Neo4j Desktop Neo4j Desktop 是一个图形化的桌面应用程序&#xff0c;主要为开发人员和个人使用提供了一个便捷的环境来安装、管理和运…

FebHost:企业注册.UK域名步骤--了解英国商业环境

企业注册.UK域名步骤&#xff1a;了解英国商业环境 对于希望拓展国际业务的公司和企业家来说&#xff0c;在英国开展业务具有众多优势。英国是一个对企业友好的目的地&#xff0c;吸引着初创企业和国际公司&#xff0c;并将自己定位为首屈一指的全球经济强国&#xff0c;在欧洲…

无人机动力系统测试-实测数据与CFD模拟仿真数据关联对比分析

我们经常被问到这样的问题&#xff1a;“我们计划运行 CFD 仿真&#xff0c;我们还需要对电机和螺旋桨进行实验测试吗&#xff1f;我们可能有偏见&#xff0c;但我们的答案始终是肯定的&#xff0c;而且有充分的理由。我们自己执行了大量的 CFD 仿真&#xff0c;但我们承认&…

cantos7.9系统-部署mysql-8.0.35

前言:MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它基于SQL&#xff08;Structured Query Language&#xff09;进行操作。以下是MySQL的一些基本介绍&#xff1a; 开源&#xff1a;MySQL由瑞典MySQL AB公司开发&#xff0c;后来被Su…

预测AI如何提升销售绩效管理:五大方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

# 第20章 Cortex-M4-触摸屏

第20章 Cortex-M4-触摸屏 20.1 触摸屏概述 20.1.1 常见的触摸屏分类 电阻式触摸屏、电容式触摸屏、红外式触摸屏、表面声波触摸屏 市场上用的最多的是电阻式触摸屏与电容式触摸屏。红外管式触摸屏多用于投影仪配套设备。 电阻式触摸屏构成&#xff1a;整个屏由均匀电阻构成…

Selenium自动化测试

片头 嗨~小伙伴们&#xff0c;今天&#xff0c;我们来开启新的篇章---Selenium自动化测试&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、自动化测试 指通过专门的软件工具和脚本来执行测试任务&#xff0c;而不需要人工干预。它可以自动执行各种测试任务&am…

下一代以区域为导向的电子/电气架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

RH850-F1KMS1 DMA数据转移

DMA简介 随着汽车电子系统和工业自动化的需求不断增长&#xff0c;DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;技术在提高数据传输效率方面扮演着重要角色。在本篇文章中&#xff0c;我们将探讨RH850微控制器如何高效实现DMA传输&#xff0c;以…