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


推荐阅读
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
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社区 版权所有