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


推荐阅读
  • Spring框架下发送嵌入图片邮件时遇到的技术挑战与解决方案
    在Spring框架中发送嵌入图片的HTML格式邮件时,常遇到技术挑战。一种有效的解决方案是在邮件内容中直接使用``标签来引用图片。此外,还可以通过MimeMessageHelper类的addInline方法将图片作为内联资源添加到邮件中,确保图片能够正确显示。这种方法不仅提高了邮件的可读性,还增强了用户体验。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 本课程详细解析了Spring AOP的核心概念及其增强机制,涵盖前置增强、后置增强和环绕增强等类型。通过具体示例,深入探讨了如何在实际开发中有效运用这些增强技术,以提升代码的模块化和可维护性。此外,还介绍了Spring AOP在异常处理和性能监控等场景中的应用,帮助开发者更好地理解和掌握这一强大工具。 ... [详细]
  • SpringBoot启动脚本详解:BAT文件应用与基础入门指南(SpringBoot系列第1篇)
    如果你还在为SSM框架的复杂搭建过程和繁琐的配置文件而烦恼,那么SpringBoot将是你的一大福音。作为SpringBoot系列的第一篇文章,本文详细介绍了如何使用BAT文件来启动SpringBoot应用,并提供了基础入门指南,帮助开发者快速上手,简化开发流程。 ... [详细]
  • 随着越来越多的应用程序采用JSON格式作为响应数据,基于Spring Framework构建的服务端应用也广泛采用了这一实践。本文将详细介绍如何在Spring 4.x版本的MVC框架中配置和实现HTTP请求返回JSON数据流,涵盖相关配置、依赖管理和代码示例,帮助开发者高效地实现这一功能。 ... [详细]
  • 如何将Jaxws客户端的Spring XML Bean配置转换为基于Java的配置?本文将指导你如何将现有的Spring XML配置文件转换为等效的Java配置,以提高代码的可维护性和灵活性。通过示例代码,详细展示了转换过程中的关键步骤和注意事项。 ... [详细]
  • 本文将详细介绍如何在SSM框架中无缝集成ShardingSphere 4.10,以实现高效的数据分片和读写分离。通过实例演示和代码解析,帮助开发者快速掌握这一复杂但实用的技术。文章从基础概念入手,逐步深入到具体配置和应用实践,旨在为读者提供一个全面、易懂的整合指南。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 优化Oracle数据库日志功能的关闭方法与实践
    在优化Oracle数据库日志功能的过程中,关闭不必要的日志记录是一项重要任务。本文探讨了Oracle 11g中日志路径的配置和管理,特别是针对常用的警报日志(alert log)。通过合理配置 `alert_$ORACLE_SID.log` 文件,可以有效减少日志文件的大小和提高系统性能。此外,文章还介绍了如何通过调整参数和使用脚本自动化日志管理,进一步提升数据库的稳定性和维护效率。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 本文详细介绍了在CentOS 7上构建DNS解析服务器的步骤与配置方法。DNS系统不仅负责将主机名(域名)转换为相应的IP地址(正向解析),还能够根据IP地址反查主机名(反向解析)。此外,文章还探讨了不同类型的DNS服务器,如缓存域名服务器的作用和配置要点。通过本指南,读者可以全面了解并成功搭建一个高效稳定的DNS解析环境。 ... [详细]
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社区 版权所有