热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud微服务架构中的Gateway组件:实现高效请求路由与过滤功能的网关解决方案

本文深入探讨了SpringCloud微服务架构中Gateway组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置Gateway以自动从Nacos服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。

文章目录

  • 1. 基本配置
  • 2. 静态路由
  • 3. 动态路由
  • 4. 开启网关拉取nacos服务
  • 参考


1. 基本配置

1.导包

<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
<dependency><groupId>com.alibaba.nacosgroupId><artifactId>nacos-clientartifactId><version>1.1.1version>
dependency>
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId><version>0.2.2.RELEASEversion>
dependency>

2.编写启动类

&#64;SpringBootApplication
public class GateWayApp {public static void main(String[] args) {SpringApplication.run(GateWayApp.class,args);}
}

3.编写配置文件

# 配置网关的端口
server:port: 80
# 配置网关的名称
spring:application:name: GATEWAY&#61;SERVER
#配置网关的相关属性cloud:gateway:#路由配置,转发规则routes:# 唯一标识&#xff0c;一般写网关对应的微服务名字- id: NACOS-CONSUMER# 网关对应微服务的路径uri: http://localhost:8000# 用户请求网关的地址http://localhost:80后面的地址如果与这个规则一样&#xff0c;网关则会找到相对应的服务地址&#xff1a;# 比如http://localhost:8000&#xff0c;然后再用这个地址与用户请求的地址http://localhost:80后面的地址作拼接# 1.用户请求网关的地址http://localhost:80/hello/find# 2.跟这个规则相同&#xff0c;找到相对应的服务地址http://localhost:8000# 3.用服务地址与用户输入的地址/hello/find作拼接# 4.得到最终服务的地址&#xff0c;http://localhost:8000/hello/findpredicates:- Path&#61;/hello/**

功能和nginx类似&#xff0c;当发送http://localhost:80/hello/find&#xff0c;会被重定向为http://localhost:8000/hello/find

2. 静态路由

刚刚写的配置文件中的服务地址是写死的&#xff0c;如果服务端口这些发生改变&#xff0c;配置文件也要跟着改变。

修改一个静态配置&#xff0c;如下图&#xff0c;修改端口为8001&#xff1a;

- id: NACOS-CONSUMERuri: http://localhost:8001predicates:- Path&#61;/hello/**

当发送http://localhost:80/hello/find&#xff0c;会被重定向为http://localhost:8001/hello/find

3. 动态路由

静态路由存在的缺点就是当服务发生变化时&#xff0c;例如端口发生变化&#xff0c;此时需要重新配置&#xff0c;比较麻烦。此时&#xff0c;可以采用动态路由&#xff0c;通过注册中心进行服务发现&#xff0c;当目录服务发生变化时&#xff0c;自动获取最新的服务信息。

1.在yaml配置文件中增加对应的注册中心地址&#xff1a;

nacos:discovery:server-addr: 127.0.0.1:8848

2.将静态地址改成动态&#xff0c;将uri属性改为lb://服务实例名称


- id: NACOS-CONSUMERuri: lb://NACOS-PROVIDERpredicates:- Path&#61;/hello/**

注意&#xff0c;此时 uri由静态的url 改为了 lb://NACOS-PROVIDER&#xff0c;当用户访问consumer的url http://localhost:80/hello/find时&#xff0c;会从注册中心查找NACOS-PROVIDER服务信息&#xff0c;假设NACOS-PROVIDER服务有多个实例&#xff0c;分别为8001和8002&#xff0c;此时会转为&#xff1a;

交替&#xff0c;负载均衡&#xff1a;

http://localhost:8001/hello/find
http://localhost:8002/hello/find

4. 开启网关拉取nacos服务

在第三章节&#xff0c;通过动态路由&#xff0c;我们可以使用负载均衡功能&#xff0c;但是仍存在问题&#xff0c;一个服务如果存在多个url&#xff0c;那么我要配置多个predicates&#xff0c;这样很累&#xff0c;有没有简化配置&#xff1f;

可以。

locator.enabled 默认为false&#xff0c;设置为true表示开启通过微服务创建路由的功能&#xff0c;即可以通过微服务名访问服务

discovery:locator:enabled: true

完整的配置入下&#xff1a;

spring:application:name: gateway-servercloud:nacos:discovery:
# server-addr: x.x.x.x:8848server-addr: 127.0.0.1:8848gateway:discovery:locator:enabled: true#routes: &#39;可以省略routes了&#39;# 唯一标识&#xff0c;一般写网关对应的微服务名字#- id: NACOS-CONSUMER# 网关对应微服务的路径#uri: lb://NACOS-PROVIDER#predicates:#- Path&#61;/hello/**

http://localhost:80/NACOS-PROVIDER/hello/find
在这里插入图片描述

参考

springCloud微服务组件&#xff1a;Gateway&#xff08;网关&#xff09;
springcloud gateway: discovery: locator: enabled: true 解释


推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
author-avatar
mobiledu2502859507
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有