Nacos 2.x 系列【8】集成 Spring Cloud Gateway

文章目录

    • 1. 概述
      • 1.1 API 网关
      • 1.1 Spring Cloud Gateway
    • 2. 集成案例
      • 2.1 入门案例
      • 2.2 动态路由

1. 概述

1.1 API 网关

API网关已经成为了微服务架构的一个标配组件,是系统对外的唯一入口。所有的客户端都通过统一的网关接入微服务,在网关层处理所有非业务功能。

API网关的主要作用包括如下几点:

  1. 统一对外接口
  2. 增加系统安全性
  3. 统一鉴权
  4. 服务注册与授权
  5. 服务限流
  6. 提升预发能力
  7. 全链路跟踪

常用网关解决方案:

  1. Netflix Zuul(已被淘汰)
  2. Spring Cloud Gateway
  3. Nginx + Lua
  4. Kong
  5. Traefik
  6. Orange

1.1 Spring Cloud Gateway

官方文档

Spring Cloud Gateway是基于Spring生态系统之上构建的API网关,包括Spring 6Spring Boot 3Project Reactor

Netflix Zuul的替代方案,不仅提供统一的路由方式,还提供安全、指标度量、限流等方面的功能。 依托于Spring Cloud生态,Spring Cloud Gateway已经成为微服务架构中最流行的API网关。

Spring Cloud Gateway三大核心概念:

  • Route:路由,网关的基本构建块。它由一个ID、一个目标URI、一组谓词和一组过滤器定义。
  • PredicateJava 8中的函数谓词,输入类型为Spring Framework ServerWebExchange,允许匹配HTTP请求中的任何内容,例如标头或参数。如果聚合谓词为true,则匹配路由。
  • Filter:过滤器,Gateway Filter的实例,由特定工厂构建,可以在发送下游请求之前或之后修改请求和响应。

2. 集成案例

2.1 入门案例

在之前的测试工程中创建一个网关模块gateway-demo
在这里插入图片描述

引入spring-cloud-starter-gateway依赖:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.pearl</groupId><artifactId>nacos-demo</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>gateway-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway-demo</name><description>gateway-demo</description><properties><java.version>17</java.version></properties><dependencies><!--API 网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

spring-cloud-starter-gateway依赖中包含了网关以及WebFlux
在这里插入图片描述

启动类:

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

application.yml添加端口、服务名、路由规则配置:

server:port: 80
spring:application:name: gateway-democloud:gateway:routes:- id: order-demo                # 路由唯一IDuri: http://localhost:9001    # 目标URIpredicates:                   # 断言,为真则匹配成功- Path=/order/**            # 配置规则Path,如果是order开头的请求,则会将该请求转发到目标URI 

启动项目查看日志,可以看到底层使用的是Netty
在这里插入图片描述
首先,我们直接访问订单服务中的接口:
在这里插入图片描述

然后通过网关地址访问,可以看到网关根据路由配置进行了转发:
在这里插入图片描述

2.2 动态路由

在上面的案例中,我们的路由都是写在配置文件中的,在微服务架构中,后台有很多个,地址也是动态的,这么配置肯定是不现实的,所以Spring Cloud Gateway提供了基于注册中心服务发现机制的动态路由。

Spring Cloud Gateway支持与EurekaNacosConsul等进行整合,根据service ld自动从注册中心获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例时不用修改网关的路由配置。

首先添加NacosLoad Balancer依赖:

        <!-- Nacos 服务发现客户端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--客户端负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

application.yml添加Nacos地址以及动态路由配置:

server:port: 80
spring:application:name: gateway-democloud:nacos:# 服务发现discovery:username: nacospassword: nacos# 命名空间namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec# 服务端地址,默认:127.0.0.1:8848server-addr: 127.0.0.1:8848gateway:discovery:locator:# 开启服务发现动态路由enabled: true# 是否将服务名称小写lower-case-service-id: true

通过以下方式访问:

# 网关地址/服务注册名/目标请求路径  
http://localhost/app-service001/app1/test

成功通过服务名,转发到具体的后台应用:
在这里插入图片描述

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

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

相关文章

部署 harbor 创建私有项目

一在 Docker harbor 节点&#xff08;192.168.11.&#xff09;上操作 1 关闭防火墙防护 systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 2 安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-ma…

SSRF攻击技术

1、SSRF形成原因 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要目标网站的内部系统。&#xff08;因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系…

思科模拟器--03.RIP协议路由--24.5.17

1.首先&#xff0c;先创建两个个人电脑:PC0和PC1和三个路由器:R1&#xff0c;R2和R3. (诀窍:建议用文本框标注一下重要简短的内容; 目的:降低失误概率,提高成功率!) 第0步:(个人电脑的IP,子网掩码和默认网关配置) 接着&#xff0c;可以先将个人电脑的IP和网关先配置一下…

ThreadLocal原理及使用

一、引言 在Java多线程编程中&#xff0c;ThreadLocal是一个非常有用的工具&#xff0c;它提供了一种将对象与线程关联起来的机制&#xff0c;使得每个线程都可以拥有自己独立的对象副本&#xff0c;从而避免了线程安全问题。然而&#xff0c;使用不当会导致内存泄漏问题。 二…

go 微服务框架kratos错误处理的使用方法及原理探究

通过go语言原生http中响应错误的实现方法&#xff0c;逐步了解和使用微服务框架 kratos 的错误处理方式&#xff0c;以及探究其实现原理。 一、go原生http响应错误信息的处理方法 处理方法&#xff1a; ①定义返回错误信息的结构体 ErrorResponse // 定义http返回错误信息的…

无人机飞手前途分析

无人机飞手的前途充满了各种可能性和挑战&#xff0c;这主要得益于无人机技术的快速发展和广泛应用。以下是对无人机飞手前途的一些分析&#xff1a; 1. 技术发展与需求增长&#xff1a;随着无人机技术的不断进步&#xff0c;其应用场景也在持续扩大。从地理测绘、巡检、农林植…

利用阿里OSS服务给文件设置过期删除--简单版

在云存储广泛应用的今天&#xff0c;阿里云的Object Storage Service&#xff08;OSS&#xff09;以其高度可扩展性、安全性和成本效益&#xff0c;成为了众多企业和开发者存储海量数据的首选方案。随着数据量的不断膨胀&#xff0c;高效的数据管理和成本控制变得尤为重要。其中…

IT学习笔记--Kafka

Kafka概述: 定义: Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff0c;主要应用于大数据实时处理领域。 消息队列消息队列的两种模式: 点对点模式: 消息生产者生产消息发送到Queue中&#xff0c;然后消息消费者从Queue中取出并且消费消息。 消息被消费以后&#…

Linux中解决普通用户使用不了sudo问题

目录 sudo的使用场景sudo使用不了的原因解决方法 sudo的使用场景 之前我们介绍了文件的权限问题 如果一个普通用户想去执行一个它命令之外的权限&#xff0c;只能使用sudo 比如普通用户使用yum去安装软件&#xff0c;需要sudo yum xxxx sudo使用不了的原因 这里我们用普通用户…

小恐龙跳一跳源码

小恐龙跳一跳源码是前两年就火爆过一次的小游戏源码&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧这个源码分享出来了&#xff01;有喜欢的直接下载就行&#xff0c;可以本地单机直接点击index.html进行运行&#xff0c;又或者放在虚拟机或者服务器上与朋友进行…

python 获取视频的时长

以下是几种获取视频时长的实现方法&#xff1a; 方法一&#xff1a;使用moviepy库 from moviepy.editor import VideoFileClipdef get_video_duration(file_path):video VideoFileClip(file_path)duration video.durationvideo.close()return duration 方法二&#xff1a;…

SAP-FICO-凭证编号控制

成本凭证编号KANK 如果自己的公司下没有&#xff0c;直接复制系统原有的就可以。使用系统默认即可。 如果不维护 会报错“CO-凭证编号分配对于成本控制范围****中的商业事务COIN无效” 财务凭证编号FBN1 可以用OBH2批量复制编号范围。 物料账期MMPV 财务账期OB52

python使用base加密解密

原理 base编码是一种加密解密措施&#xff0c;目前常用的有base16、base32和base64。其大致原理比较简单。 以base64为例&#xff0c;base64加密后共有64中字符。其加密过程是编码后将每3个字节作为一组&#xff0c;这样每组就有3*824位。将每6位作为一个单位进行编码&#xf…

1个逗号,提升Python代码质量

有些时候&#xff0c;我们会在Python代码中看到列表或其他科迭代对象的结尾会存在一个逗号&#xff1a; 而且编辑器和解释器都容许这种逗号的存在&#xff0c;它就叫作拖尾逗号。 通常是为了在频繁地增减数组元素的时候同时保证语法的正确&#xff0c;且拖尾逗号不占用数组的长…

MySQL 主备环境搭建 docker

MySQL 主备环境搭建 docker 拉取docker镜像 sudo docker pull mysql:8.0 启动容器 docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0配置 M…

第四十二天 | 背包问题理论

二维&#xff1a; 1.dp[i][j] 表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。 2.递归公式&#xff1a; dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]); 3.初始化&#xff1a; 首先从dp[i][j]的定义出发…

基于xilinx fpga RFSOC系列的Ultrascale+ RF Data Converter ip详解说明

目录 1 概述2 IP功能2.1 ADC性能2.2 DAC性能3 IP端口4 代码框架4.1 ADC功能框图4.2 DAC功能框图5 收发数据时序5.1 ADC数据格式5.2 DAC数据格式6 时钟配置6.1 ADC/DAC参考时钟7 数据格式配置模式7.1 ADC的配置模式7.1.1 Real -> real;7.1.2 Real ->IQ;7.1.3 IQ -> IQ;…

【设计模式】JAVA Design Patterns——Bridge(桥接模式)

&#x1f50d;目的 将抽象与其实现分离&#xff0c;以便二者可以独立变化。 &#x1f50d;解释 真实世界例子 考虑一下你拥有一种具有不同附魔的武器&#xff0c;并且应该允许将具有不同附魔的不同武器混合使用。 你会怎么做&#xff1f; 为每个附魔创建每种武器的多个副本&…

当代人工智能三教父——深度学习三巨头

文章目录 引言 人物介绍 突出贡献 专业名词解释 引言 今天下午闲来无事翻阅了一下csdn首页的头条文章——《27 岁天才创始人 Joel Hellermark 分享了自己和“AI 教父” Geoffery Hinton 的最新采访》 感觉挺有意思&#xff0c;就从头到尾的看了一遍&#xff0c;里面有很多…

pyqt5与yolov5进行视频检测(一)——登录操作

项目效果展示 一、登录界面 二、主界面 目前在更新中。。。 一、设计 二、登录代码 注意&#xff1a;下面会导入主界面的包&#xff0c;图片资源自己设计一下&#xff0c;密码保存时没设计加密&#xff0c;需要自行设计 main_window主界面下文会设计from main_window impor…