热门标签 | 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 boot使用jetty无法启动 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • Irish budget airline Ryanair announced plans to significantly increase its route network from Frankfurt Airport, marking a direct challenge to Lufthansa, Germany's leading carrier. ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
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社区 版权所有