手把手教你搭建SpringCloud项目(九)集成Ribbon负载均衡器

Spring Cloud全文目录

源码

什么是微服务?有手就行

SpringCloud简介与5大常用组件

一、手把手教你搭建SpringCloud项目(一)搭建Maven父工程,傻瓜式操作

二、手把手教你搭建SpringCloud项目(二)生产者与消费者

三、手把手教你搭建SpringCloud项目(三)集成Eureka服务注册中心

四、手把手教你搭建SpringCloud项目(四)EurekaServer集群版搭建

五、手把手教你搭建SpringCloud项目(五)生产者集群版搭建

六、手把手教你搭建SpringCloud项目(六)actuator微服务信息完善与Eureka自我保护机制

七、手把手教你搭建SpringCloud项目(七)Eureka实现服务发现(Discovery)

八、手把手教你搭建SpringCloud项目(八)集成Consul服务注册中心

九、手把手教你搭建SpringCloud项目(九)集成Ribbon负载均衡器

十、手把手教你搭建SpringCloud项目(十)集成OpenFeign服务接口调用

十一、手把手教你搭建SpringCloud项目(十一)集成Hystrix之服务降级

十二、手把手教你搭建SpringCloud项目(十二)集成Hystrix之服务熔断

十三、手把手教你搭建SpringCloud项目(十三)集成Hystrix之图形化Dashboard实时监控

十四、手把手教你搭建SpringCloud项目(十四)集成Gateway新一代服务网关

十五、手把手教你搭建SpringCloud项目(十五)集成Config分布式配置中心

十六、手把手教你搭建SpringCloud项目(十六)集成Bus消息总线

十七、手把手教你搭建SpringCloud项目(十七)集成Stream消息驱动

十八、手把手教你搭建SpringCloud项目(十八)集成Sleuth分布式链路跟踪

文章持续更新中,欢迎关注!

一、Ribbon简介

分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负载均衡器

Ribbon 是负载均衡器 ,是一个基于HTTP和CP的客户端负载均衡工具,它提供了很多负载均衡算法,例如轮询、随即等,在配置服务提供者地址后,可以将服务消费者请求均匀的分发

Ribbon的架构图
在这里插入图片描述

Ribbon的核心组件IRule

在这里插入图片描述

IRule的七大负载算法

IRule接口有7个实现类,每个实现类代表一个负载均衡算法,默认使用轮询
在这里插入图片描述

什么是Load Balancer?
Load Balancer将用户访问分配至各个计算资源(例如服务器,数据库等)
在这里插入图片描述
Load Balancer为以下方面提供高效服务:

  1. 防止请求被发送到不正常的服务器
  2. 防止资源过载(resource overloading)
  3. 帮助消除单点故障(singlepoint of failure)

前边的文章,我们实现了消费者访问生产者集群轮询赋值均衡,具体的请点击查看。Ribbon就是实现服务端的负载均衡加RestTemplate的调用。是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。

二、代码实例

1.添加规则类

注意: 官方文档明确给出了警告:
在这里插入图片描述
更改负载算法,由我们的默认轮询算法换为随机算法,需要自定义一个配置类。注意:这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下,否则自定义的配置类就会被所有的 Ribbon 客户端所共享,达不到特殊化定制的目的了。如下图:
在这里插入图片描述

新建MySelfRule配置类,变为随机,如下图:

package com.dyh.myrule;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 自定义负载均衡规则类
 *
 * @ClassName: MySelfRule
 * @author: dyh
 * @since: 2021/12/16 20:53
 */

@Configuration
public class MySelfRule {
    @Bean
    public IRule myRule() {
        // 负载均衡规则改为随机
        return new RandomRule();
    }
}

2.主启动类 OrderMain81 添加 @RibbonClient

在启动该微服务的时候就能去加载我们的自定义 Ribbon 配置类,从而使配置生效

package com.dyh.springcloud;

import com.dyh.myrule.MySelfRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;

/**
 * @ClassName: OrderMain81
 * @author: dyh
 * @since: 2021/12/15 13:06
 */
@SpringBootApplication
@EnableEurekaClient
//name为生产者服务的服务名称  configuration为配置类的类名
@RibbonClient(name = "SPRINGCLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
public class OrderMain81 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain81.class, args);
    }
}

3.测试

那现在启动7001服务和7002服务,然后启动8001服务与8002服务,再启动81服务,访问路径http://localhost:81/consumer/payment/get/1,由原先的轮询8001服务与8002服务来回切换,变为了8001服务与8002服务随机访问。
在这里插入图片描述

简单集成Ribbon的负载算法就就完成啦。so easy!
在这里插入图片描述
下一篇文章学习OpenFeign服务接口调用,持续关注、点赞。我们持续更新中。
在这里插入图片描述


版权声明:本文为qq_42322632原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。