Spring Cloud Gateway集成Nacos实现负载均衡

这篇具有很好参考价值的文章主要介绍了Spring Cloud Gateway集成Nacos实现负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💡Nacas可以用于实现Spring Cloud Gateway中网关动态路由功能,也可以基于Nacos来实现对后端服务的负载均衡,前者利用Nacos配置中心功能,后者利用Nacos服务注册功能。

接下来我们来看下Gateway集成Nacos实现负载均衡的架构图

Spring Cloud Gateway集成Nacos实现负载均衡

一. 环境准备

1. 版本环境
  • Jdk: <java.version>1.8</java.version>

  • SpringBoot: <version>2.4.2</version>

  • SpringCloud: <spring.cloud.version>2020.0.1</spring.cloud.version>

  • SpringCloudAlibaba: <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>

2. 服务环境
  • spring-cloud-user-center : 独立用户服务(2个)

  • spring-cloud-gateway: 独立的网关服务

二. 实战

  1. 创建用户服务

为了演示请求负载,将spring-cloud-user-center部署两份分别开放8005和8006端口

  1. 引入相关依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
  1. yml配置

server:
  port: 8085

spring:
  application:
    name: spring-cloud-user-center
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        ip: 127.0.0.1
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 编写测试类

测试类1

/**
 * @author gf
 * @date 2023/2/14
 */
@Slf4j
@RestController
public class UserController {
    @RequestMapping("/user")
    public String user(){
        log.info("hello Mr gateway,this is user server");
        return "hello Mr gateway,this is user server";
    }
}

重复以上1,2步骤重新创建一个服务,记得将配置文件中的端口号区分一下,然后

spring.application.name不变,依旧是spring-cloud-user-center。

测试类2

我们这里为了演示方便只是将之前的订单服务改造了一下,可以参考以下链接

SpringBoot整合Gateway+Nacos

@Slf4j
@RestController
public class OrderController {


    @RequestMapping("/user")
    public String getOrder(){
        log.info("hello Mr gateway,this is order server");
        return "hello Mr gateway,this is order server";
    }
}
  1. 启动类

由于我们要将服务注册倒注册中心,所以我们在以内nacos依赖后要在启动类上添加@EnableDiscoveryClient注解

@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudUserCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudUserCenterApplication.class, args);
    }

}
2.创建网关服务
  1. 引入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.scg</groupId>
    <artifactId>spring-cloud-nacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-gateway</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.version>2020.0.1</spring.cloud.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</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-gateway</artifactId>
        </dependency>
        <!--得不加上这个配置,不然会报503-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 配置yml文件


server:
  port: 8082
spring:
  application:
    name: gateway_server
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          #开启从注册中心动态创建路由的功能,利用微服务名进行路由
          enabled: true
          #开启小写验证,默认feign根据服务名查找都是用的全大写
          lowerCaseServiceId: true
      routes:
        - id: spring-cloud-user-center
          uri: lb://spring-cloud-user-center
          # 断言,路径相匹配的进行路由
          predicates:
            - Path=/user-center/**
          filters:
            - StripPrefix=1
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 测试

nacos可视化界面请参考:SpringCloud Alibaba 之 Nacos注册中心实战

同时启动三台服务,我们可以看到这三者服役已经注册到了nacos注册中心中

Spring Cloud Gateway集成Nacos实现负载均衡

按照我们的配置,访问http://localhost:8082/user-center/user,查看接口访问情况

Spring Cloud Gateway集成Nacos实现负载均衡
Spring Cloud Gateway集成Nacos实现负载均衡

可以看到,调用了两次,两次请求的服务不同文章来源地址https://www.toymoban.com/news/detail-494772.html

到了这里,关于Spring Cloud Gateway集成Nacos实现负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Alibaba-02-Nacos Discovery服务治理及负载均衡

    Lison dreamlison@163.com , v1.0.0 , 2023.05.10 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题: 一旦服务提供者地址变化,就需要手工修改代码 一旦是多个服务提供

    2024年02月22日
    浏览(60)
  • Spring Cloud Gateway集成Nacos作为注册中心和配置中心

    本篇文章将介绍Spring Cloud Alibaba体系下Spring Cloud Gateway的搭建,服务注册中心和分布式配置中心使用Nacos,后续将会持续更新,介绍集成Sentinel,如何做日志链路追踪,如何做全链路灰度发布设计,以及Spring Cloud Gateway的扩展等。 ​ Spring Boot,Spring Cloud,Discovery,Config等基础依

    2024年02月11日
    浏览(113)
  • 云原生微服务 第五章 Spring Cloud Netflix Eureka集成负载均衡组件Ribbon

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具,其主要功能是提供客户端的负载均衡算法和服务

    2024年02月08日
    浏览(52)
  • 【Spring Cloud】深入探索 Nacos 注册中心的原理,服务的注册与发现,服务分层模型,负载均衡策略,微服务的权重设置,环境隔离

    在微服务架构中,服务注册中心是整个体系中的关键组件之一。它负责服务的注册、发现和管理,为微服务之间的通信提供了基础设施。在这方面,Nacos(Namespace Aware Clustered Object Storage)作为一种服务发现和配置管理系统,提供了丰富的功能,旨在简化微服务架构中的服务注

    2024年02月06日
    浏览(214)
  • Spring Cloud Gateway + Nacos 实现服务上下线无缝切换

    大家好,我是不才陈某~ 最近知识星球的球友在学习星球中的《精尽Spring Cloud Alibaba》专栏提到一个问题,相信也有很多人在线上环境遇到过,或许也因此被批过:一个集群中有某个服务突然下线,但是网关还是会去请求这个实例,所以线上就报错了,报错信息如下图: 究其

    2024年02月15日
    浏览(44)
  • springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4

    1.pom文件 2.启动类 3.配置文件 1.启动nacos,sleuth 2.启动gatewayapi,mscloud-nacos-provider7001,mscloud-nacos-provider7002 如图: 3.访问 多次刷新:7001和7002 不停的切换

    2024年02月11日
    浏览(37)
  • 【Spring Cloud】Ribbon 实现负载均衡的原理,策略以及饥饿加载

    在前文《深入理解 Eureka 注册中心的原理、服务的注册与发现》中,介绍了如何使用 Eureka 实现服务的注册与拉取,并且通过添加 @LoadBalanced 注解实现了负载均衡。这种自动化的背后隐藏着许多疑问: 服务是在何时进行拉取的? 负载均衡是如何实现的? 负载均衡的原理和策略

    2024年02月07日
    浏览(47)
  • SpringCloud Nacos Gateway 负载均衡 Netty的Websocket

    目录 一、Gateway的WS协议配置 二、问题引出 三、解决方法 一、Gateway的WS协议配置 ws: 代表通过websocket长连接协议,其他是gateway的常规配置。 二、问题引出 我已搭建了传统的Netty聊天室服务,即一个SpringBoot项目中同时存在web项目与Netty服务器,配置如下:服务器实际上会使用

    2024年02月11日
    浏览(38)
  • Spring Cloud集成Nacos实现本地配置优先 | Spring Cloud 9

    Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator 接口,并将优先级设置为最高。 在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解

    2024年02月15日
    浏览(66)
  • Spring Cloud集成Nacos实现服务配置中心 | Spring Cloud 7

    先我们来看一下,微服务架构下关于配置文件的一些问题: 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。 配置文件无法区分环境,开发环境、测试环境、线上环境。微服务项目可能会

    2024年02月14日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包