• 【云原生】springcloud08——Ribbon负载均衡调用


    在这里插入图片描述

    前 言
    🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端
    ☕专栏简介:深入、全面、系统的介绍springcloud与springcloud Alibaba微服务常用技术栈
    🌰 文章简介:本文将介绍Ribbon负载均衡调用,建议收藏备用,创作不易,敬请三连哦
    🥒文章推荐:
    微服务架构与springcloud 01——微服务入门
    微服务架构与springcloud02——父工程构建及支付模块实现
    微服务架构与springcloud03——项目热部署与消费者订单模块
    微服务架构与springcloud04——Eureka服务注册与发现
    springcloud05——Zookeeper实现支付微服务
    【云原生】springcloud06——订单服务注册zookeeper
    【云原生】springcloud07—Consul的服务注册与发现
    大厂面试真题|面经

    1.Ribbon介绍

    这篇文章我们讲介绍负载均衡调用组件:Ribbon。

    1.1 Ribbon简介

    ❤ Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。

    组件官网:https://github.com/Netflix/ribbon

    项目状态:维护ing,但是它很优秀,还没有很成熟的替代方案。
    在这里插入图片描述
    未来可能被Loadblancer替代。
    在这里插入图片描述

    1.2 Ribbon应用场景

    Ribbon主要应用于负载均衡,配合RestTemplate实现RPC的远程调用。
    在这里插入图片描述

    2.环境准备

    先恢复下Eureka集群环境。如下图,依次启动Eureka服务器7001,7002,支付微服务8001,8002,订单微服务80。

    在这里插入图片描述

    测试下,http://localhost:7001/
    在这里插入图片描述
    http://localhost:7002/
    在这里插入图片描述

    3 Ribbon的负载均衡与Rest调用

    3.1 工作原理

    下图描述了Ribbon配合Eureka实现负载均衡的架构。
    在这里插入图片描述
    其工作原理如下。
    在这里插入图片描述

    3.2 Ribbon依赖引入

    我们之前已经知道,我们访问订单微服务提供的接口时,其实已经采用轮询机制调用支付微服务端口8001,8002了在这里插入图片描述在这里插入图片描述

    但是我们可用在订单微服务80的pom文件中查找下,并引入没有ribbon的依赖。

    实际上,这是因为我们引入netflix-eureka了,已经整合了ribbon。

     <!-- eureka-client -->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    不信您可用按住ctrl点进去看。

     <dependency>
          <groupId>org.springframework.cloudgroupId>
          <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
          <version>2.2.1.RELEASEversion>
          <scope>compilescope>
     dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    当然,你也可以自己加或者在和其它组件配合时使用,可以自己引入依赖。

    3.3 RestTemplate

    @LoadBalanced注解给RestTemplate开启负载均衡的能力。

    官方文档:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

    在这里插入图片描述

    他的get请求有getForObject,getForEntity两种方法,前者可以理解返回json,后者包含响应一些重要信息:响应头、响应状态码、响应头等。post与get类似。
    在这里插入图片描述
    getForObject已经用过了,所以只测试getForEntity方法。

      @GetMapping("payment/getForEntity/{id}")
        public CommonResult getPaymentById2(@PathVariable("id")Long id){
            ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
            if(entity.getStatusCode().is2xxSuccessful()) {
                return entity.getBody();
            } else {
                return new CommonResult(444, "操作失败");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    entity还可以返回更多其他信息,比如头信息等,你可以自己看看其api摸索摸索自定义。

    推荐使用object方式,因为返回json串是主流方式。

    3.4 默认的负载均衡规则

    ribbon的默认负载规则有七种。

    在这里插入图片描述

    解释如下。
    在这里插入图片描述

    如何替换呢?先看看官网的这个提醒

    在这里插入图片描述

    🤞Ribbon的自定义配置类不可以放在@ComponentScan所扫描的当前包下以及子包下,否则这个自定义配置类就会被所有的Ribbon客户端共享,达不到为指定的Ribbon定制配置,而@SpringBootApplication注解里就有@ComponentScan注解,所以不可以放在主启动类所在的包下。(因为Ribbon是客户端(消费者)这边的,所以Ribbon的自定义配置类是在客户端(消费者)添加,不需要在提供者或注册中心添加)

    为了让所有小兄弟都能够理解,我这边稍微解释下。点进主启动类.

    在这里插入图片描述
    点进SpringBootApplication,看到ComponentScan了么。

    在这里插入图片描述
    那就是说,Ribbon的配置类不可以放在com.wangzhou.springcloud这个包下了,而是需要另起炉灶。再新建一个myrule包。

    在这里插入图片描述

    自定义规则配置类。

    @Configuration
    public class MyselfRule {
    
        @Bean
        public IRule myRule() {
            return new RandomRule();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在主启动类上添加@RibbonClient(name = “CLOUD-PAYMENT-SERVICE”, configuration = MyselfRule.class)name为指定的服务名(服务名必须与注册中心显示的服务名大小写一致)configuration为指定服务使用自定义配置(自定义负载均衡机制)

    在这里插入图片描述
    测试:浏览器输入http://localhost/consumer/payment/get/1,多次刷新实现负载均衡为随机。

  • 相关阅读:
    BevFusion (2): nuScenes 数据介绍及点云可视化
    2019年Java面试题汇总
    linux 1
    java学习第三天笔记-运算符01算术运算符的基本用法41
    Leetcode 2909. Minimum Sum of Mountain Triplets II
    Python中怎样选择正确的可视化图表?
    Jmeter03:直连数据库
    第八章 排序 七、堆排序
    聚类测试_31省市居民家庭消费水平
    风靡整个DOS时代的Pctools,现已不再,饱受争议的它,又能走多远
  • 原文地址:https://blog.csdn.net/qq_41708993/article/details/126532237