springcloud-alibaba (04)Gateway与Nacos结合使用

news2024/12/24 8:59:20

Gateway与Nacos结合使用

🎉欢迎来到这里,今天我将为大家介绍如何将Spring Cloud Gateway和Nacos结合使用,实现一个高效稳定的服务网关!在微服务架构中,API网关是必不可少的一部分,它提供了路由请求、负载均衡、安全认证和限流等功能。Spring Cloud Gateway是基于Spring Framework、Spring Boot和Project Reactor等技术的API网关,它提供了一种简单而有效的方式来对微服务进行路由、过滤和流量控制。Nacos是一个用于服务注册和发现的组件,它提供了一种稳定、易于使用、无锁的服务发现方案。那么,让我们看看如何将它们结合起来,实现一个强大的服务网关吧!🚀

🖥️💻👨‍💻🖥️💻

  • Gateway与Nacos结合使用
    • 1. 单独使用Gateway
    • 2. Gateway和Nacos结合
    • 3. 总结🎓

1. 单独使用Gateway

首先,让我们来看看如何单独使用Spring Cloud Gateway。只需要添加依赖和配置Gateway即可。

  1. 添加依赖💡
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  1. 配置Gateway🛠️

然后,在配置文件(application.yml或application.properties)中声明要转发的路由即可。

server:
  port: 7003
spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      routes:
        - id: user-server               # 当前路由的标识, 要求唯一
          uri: "http://localhost:7001"  # 请求要转发到的地址
          order: 1                      # 路由的优先级,数字越小级别越高
          predicates:                   # 断言(就是路由转发要满足的条件)
            - Path=/user-server/**      # 当请求路径满足Path指定的规则时,才进行路由转发
          filters:                      # 过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
            - StripPrefix=1             # 转发之前去掉1层路径

以上配置中声明了一个路由,将路径为/user-server/**的请求转发到相应的服务上。

在这里插入图片描述

接下来,让我们来看看如何将Spring Cloud Gateway和Nacos结合使用,以实现更强大的功能。

2. Gateway和Nacos结合

我们可以将Spring Cloud Gateway和Nacos结合使用,为微服务架构提供更加稳定和高效的服务网关解决方案。接下来,我将一步一步的教大家如何结合使用它们。

  1. 添加依赖💡

在pom.xml文件中添加以下依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

这是一些Spring Cloud相关的依赖,包括了Spring Cloud Gateway、Spring Cloud Alibaba Nacos Discovery和Spring Cloud LoadBalancer。

当Gateway在使用Nacos作为服务发现和注册中心时,使用loadbalancer依赖可以让Gateway自动从Nacos注册中心获取可用的服务实例列表,并根据路由规则将请求转发到不同的实例上,实现负载均衡和高可用性。

因此,加上loadbalancer依赖可以使得Gateway和Nacos的结合更加完善,为微服务架构提供更加稳定和高效的服务网关解决方案。

  1. 添加@EnableDiscoveryClient注解 (可选)🛠️
@SpringBootApplication
@EnableDiscoveryClient
public class GateWayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class, args);
        System.out.println("run");
    }
}
  1. 配置nacos注册中心和gateway🛠️

这是一个基于Spring Cloud Gateway的配置文件,其中配置了网关的路由规则。

server:
  port: 7003
spring:
  application:
    name: gateway-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.157.129:8848
    gateway:
      routes:
        - id: user-server               # 当前路由的标识, 要求唯一
          uri: lb://user-server         # lb指的是从nacos中按照名称获取微服务,并遵循负
          order: 1                      # 路由的优先级,数字越小级别越高
          predicates:                   # 断言(就是路由转发要满足的条件)
            - Path=/user-server/**      # 当请求路径满足Path指定的规则时,才进行路由转发
          filters:                      # 过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
            - StripPrefix=1             # 转发之前去掉1层路径
  • server.port:指定网关应用程序的端口号,这里设置为7003。
  • spring.application.name:指定网关应用程序的名称,这里设置为gateway-server。
  • spring.cloud.nacos.discovery.server-addr:指定Nacos服务注册中心的地址,这里设置为192.168.157.129:8848。

在gateway.routes下面,配置了一条路由规则:

当请求路径满足Path指定的规则(/user-server/**)时,将会转发到名为user-server的微服务上。
指定了路由的优先级(order),以及使用了StripPrefix过滤器,将请求路径中的一个路径进行了去除,并将剩余的部分转发给下一级微服务。

简洁版:去掉关于路由的配置🛠️

server:
  port: 7003
spring:
  application:
    name: gateway-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.157.129:8848
    gateway:
      discovery:
        locator:
          enabled: true # 让gateway可以发现nacos中的微服务

这是一个基于Spring Cloud Gateway的配置文件,其中增加了发现服务的配置。

在gateway.discovery.locator.enabled属性中设置为true,表示开启了基于服务发现的路由功能。这样,在进行路由时,就会根据微服务的名称从Nacos服务注册中心中获取对应的服务实例,从而实现了自动的服务发现负载均衡的功能。

  1. 运行Spring Boot应用程序注册到nacos服务中心

在nacos服务中心中注册一个名为user-server的微服务,并启动至少两个示例即可。

在这里插入图片描述

这两个示例除了端口号和接口返回的数据以外其他内容都一样

在这里插入图片描述

  1. 测试应用程序🔍

现在可以向Spring Cloud Gateway发送请求并将其转发到相应的服务。只要按照网关地址/微服务/接口的格式去访问,就可以得到成功响应。

  • http://localhost:7003/user-server/user/get1
  • 网关地址/微服务的名称/接口的格式

在这里插入图片描述

根据微服务的名称从Nacos服务注册中心中获取对应的服务实例,从而实现了自动的服务发现负载均衡的功能。

3. 总结🎓

以上是使用Spring Cloud Gateway进行网关配置和使用Nacos进行服务发现和负载均衡的示例。Spring Cloud Gateway和Nacos的结合可以为微服务架构提供更加稳定和高效的服务网关解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java版企业工程项目管理系统源代码-功能清单 图文解析

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

新手如何写新闻稿?一文带你了解记者稿的写作步骤与技巧

作为一名新手记者&#xff0c;写稿件是必须掌握的基本技能。记者稿的写作方式有很多种&#xff0c;但基本的步骤和技巧是相同的。在这篇文章中&#xff0c;我将向大家介绍记者稿的写作步骤和技巧&#xff0c;希望能对想要成为一名优秀记者的你有所帮助。 一、确定新闻价值 在写…

代码随想录训练营Day50| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

目录 学习目标 学习内容 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV 学习目标 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV 学习内容 123.买卖股票的最佳时机III 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09;https://lee…

深度分析:智能照明百亿赛道,Yeelight易来如何做到智能照明和定制照明双C位

日前&#xff0c;艾瑞咨询发布了《2023年中国家用智能照明行业研究报告》&#xff0c;报告显示&#xff0c;中国家用智能照明市场迎来爆发式增长&#xff0c;市场占有率从2016年仅2.0%上升到2022年的20.4%&#xff0c;7年间占比增长20%。预计2023年家用智能照明市场规模将突破1…

千呼万唤始出来!从源码到架构的Spring全系列笔记,已全部分享

因粉丝强烈要求小编整理一套spring全系列资料集合&#xff0c;不然就要集体给小编寄刀片了&#xff0c;今天终于是千呼万唤始出来&#xff0c;给大家连夜整理这一套可以说是全网最全最细的Spring全系列资料&#xff0c;今天毫无保留的给大家分享出来一起学习&#xff01;一起牛…

【JavaSE】Java基础语法(七):二维数组

文章目录 &#x1fa82;1. 二维数组概述&#x1fa82;2. 二维数组动态初始化&#x1fa82;3. 二维数组访问元素的细节问题&#x1fa82;4. 二维数组静态初始化&#x1fa82;5. 二维数组遍历&#x1fa82;6. 二维数组求和 &#x1fa82;1. 二维数组概述 概述 : 二维数组也是一种…

数据库范式理论

目录 1、1NF 2、2NF 3、3NF 4、BCNF 5、4NF 1、1NF 在实际应用中&#xff0c;数据库表的每一列&#xff08;也称为属性&#xff09;都是不可分割的原子数据项&#xff0c;不能是集合&#xff0c;数组&#xff0c;记录等非原子数据项。即在实际应用中实体中的某个属性有多个…

直播电商迈入新周期,快手如何抢跑?

文 | 螳螂观察 作者 | 图霖 直播电商迈入第七个发展年头&#xff0c;来到了新周期的变革前夜。 行业竞争逐年加剧&#xff0c;但截至2022年已迅速攀升至35000亿元的直播电商市场交易规模&#xff0c;仍诱惑着新玩家挤进这张拥堵的牌桌。 美团方面&#xff0c;继今年1月底在…

局域网唤醒工具UpSnap

什么是 UpSnap &#xff1f; UpSnap 是使用 SvelteKit、Go、PocketBase 和 nmap 编写的简单局域网唤醒应用程序。 v3 更新日志&#xff1a; ⚙️ 后端&#xff1a; 用 Go 重写。之前的版本是 Python 写的&#xff1b;不再支持不同的数据库。后端现在使用基于 SQLite 的 PocketB…

Qt+QtWebApp开发笔记(三):http服务器动态html连接跳转基础交互

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/130840894 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

电脑密码忘了怎么解除?试试这3个方法!

案例&#xff1a;我的电脑太久没有使用&#xff0c;导致我忘记了密码&#xff0c;试了好几次还是显示密码错误。怎样才能找回电脑的开机密码&#xff1f; 【我忘记了电脑密码&#xff0c;导致我无法使用电脑&#xff0c;给我的生活带来了很大的困扰。有没有小伙伴遇到过相同的…

开发最佳实践|集成声网 iOS SDK,实现语音聊天室

大家好&#xff0c;我是声网 RTE 开发者社区作者 小曾同学。本次主要分享集成声网SDK实现语音聊天室。 01 前言 在日常生活中经常会看到一些聊天场景&#xff0c;比如在线KTV、连麦开黑、多人相亲、娱乐聊天室等应用场景&#xff0c;随着移动应用开发的需求不断增加&#xff…

提高记忆力的 10 种记忆技巧和工具

人工智能的迅速发展&#xff0c;让人不禁猜想是否有一天我们也能靠AI来提高自己的记忆力&#xff1f;哈哈也许真的可行&#x1f916; 其实现在已经有很多记忆技巧和工具&#xff0c;不仅可以帮助我们存储信息&#xff0c;还可以更好地回忆和记忆更大的信息集。 实际上&#x…

lwIP更新记07:TCP 控制块申请失败可以检测到了

从 lwIP-2.0.0 开始&#xff0c;TCP 控制块申请失败可以检测到了。 这个更新应用在 TCP 服务器模式中&#xff0c;处于监听状态的 TCP_PCB &#xff0c;如果收到客户端发送的 SYN 同步标志&#xff0c;表示一个客户端在请求建立连接了。lwIP 会为这个新连接申请一个 TCP_PCB &…

APP启动页和闪屏的知识点

APP启动页和闪屏的知识点_51CTO博客_app启动屏广告 启动页与闪屏的区别 1.启动页 (launch screen ) 当app被用户打开时,在app启动过程中被用户所看到的过渡页面(或动画)都被我们统称为启动页。 优点&#xff1a; 1.打开一个产品时&#xff0c;需要有一定的时间加载&#xff…

windows sever服务器安装系统新手版

混在learnsite群里已经有几年了吧&#xff0c;但是只有一段时间用了别人现成的一个iso版本还比较老&#xff0c;这次打算自己弄一个&#xff0c;一开始打算linux下弄&#xff0c;结果系统都装完了发现人家说learnsite在linux下有点bug没解决好&#xff0c;只能win下再弄&#x…

爬虫为什么会使用到代理ip?

爬虫使用代理IP的主要目的是为了隐藏自己的真实IP地址&#xff0c;以避免被目标网站封禁或限制访问。如果一个爬虫频繁地向一个网站发送请求&#xff0c;而且每次请求的IP地址都相同&#xff0c;那么这个网站就有可能认为这是一种恶意行为&#xff0c;从而采取封禁或限制访问的…

用 Python 写 3D 游戏

vizard介绍 Vizard是一款虚拟现实开发平台软件&#xff0c;从开发至今已走过十个年头。它基于C/C&#xff0c;运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时&#xff0c;Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI)&#xff0c;进而运行…

如何对项目进度进行跟踪?逐步完善项目计划

我接手了一个小项目&#xff0c;但是无论是我还是领导&#xff0c;都认为这是个简单的项目&#xff0c;最多一月时间就能搞定。但是&#xff0c;随着时间推移&#xff0c;三个月也没有将内容完善。于是我进行了反思总结&#xff0c;我认为存在如下问题&#xff1a; 1、资源协…

vue3在setup中请求数据并使用的几种方式

因为Composition组合式API setup有一点点不同特此举例几种可行的请求数据并使用方式 第一种 Promise 参考代码如下 <template><div>{{ min }}</div> </template><script> import { ref } from vue; import { getUser } from /api/user export d…