SpringCloud(10) —— Ribbon:使用Ribbon实现负载均衡

本文介绍了如何在Spring Boot项目中实现服务提供者集群,并集成Ribbon实现负载均衡。作者通过创建多个服务实例,配置Eureka注册中心,以及调整端口和数据库结构,展示了Ribbon如何在消费者请求时轮询服务。重点在于提升服务高可用性和负载均衡的实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.实现服务提供者集群

  • 在上一篇博客中,我们只是在消费者端集成了ribbon,但是并没有明显的感受到ribbon的作用,原因是因为我们的服务提供者只有一个,不是集群,ribbon不能进行负载均衡,所以为了测试ribbon的功能,我们需要实现服务提供者的集群
  • 现在已有的服务提供者端口为8001,扩展两个服务提供者8002和8003,但是需要注意:前面在编写服务消费者的时候虽然模块名称上写的是80端口,但是在实际使用的时候发现80端口已经被占用,所以改成使用其他端口,就改成了8002端口,这就和下面要实现的一个注册服务提供者的端口冲突了,所以决定将消费者端口改为9001,模块名称上还是保留80
  • 首先创建两个服务者模块的数据库,和第一个服务者的数据库除了名字以外以他的都相同
  • 直接将db1数据库导出备份,获取到创建的sql语句
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 通过标识db_source可以知道这一条数据到底来自哪一个数据库
  • 创建了数据库就要去创建对应的服务提供者子model
    在这里插入图片描述
    在这里插入图片描述
  • 导入依赖,和8001相同
    <dependencies>
        <!--eureka完善对应服务的监控信息依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    
        <!--eureka的服务提供者的依赖-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
    
    
        <!--实体类dept依赖-->
        <dependency>
            <groupId>com.thhh</groupId>
            <artifactId>springcould-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    
        <!--数据库依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
    
        <!--logback依赖,讲解:https://zhuanlan.zhihu.com/p/136893269-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
    
    
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
    
        <!--spring boot的web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <!--spring boot的测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
    
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
    
        <!--热部署依赖:写完项目之后可以不重启项目,而是刷新一下就可以更新最新改动的资源到项目中-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
    
  • 编写8002和8003的配置文件,可以直接粘贴8001的配置文件,然后进行对应的修改
    在这里插入图片描述
    在这里插入图片描述
  • 由于是服务提供者,所以它有完整的MVC 3层架构,所以我们需要将这部分的代码也复制粘贴到8002和8003中
    在这里插入图片描述
  • 每个子model中的入口程序需要进行对应的修改
  • 启动集群进行测试
  • 注意:先开注册中心,这里先开一个注册中心,然后启动服务提供者集群,最后再启动消费者

在这里插入图片描述

  • 可见,注册中心已经接受到了同一个服务名称的3个服务提供者注册的服务的集群,在监控页面显式的就是同一个注册名称后面的Status字段有3个不同的instanceid展示,点击访问可以看到3个集群的服务
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 启动消费者,访问它的controller提供的API,查看展示的数据和只有一个服务者的时候有什么区别
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 可以从上面结果看出ribbon默认实现的负载均衡是轮询

  • 注意:前面我们做了注册中心的集群是为了注册中心的高可用,当一个注册中心崩了服务还能使用其他注册中心提供的服务继续使用;现在我们做了提供者的集群,这是为了服务提供者提供的服务的高可用,当一个服务者崩了,集群中的其他服务者还可以顶上继续提供正常的服务
  • 其中,ribbon是用于在消费者请求服务提供者提供的服务的时候实现负载均衡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值