热门标签 | 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 解释


推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
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社区 版权所有