微服务SpringCloud开弓之Ribbon负载均衡调用《六》

SpringCloud微服务负载均衡_Ribbon技术 Spring Cloud Ribbon一、介绍二、User微服务模块ymlConfigController三、Dept微服务模块ymlController测试User服务调用Dept服务报错解决办法1:解决办法2:四 、创建第二个Dept微服务模块yml配置文件五、开启Ribbon负载均衡1.Ribbon的pom依赖2.@LoadBalanced3.调用的URL测试负载均衡 一、介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端的负载均衡的工具。 简单的说,Rib 阅读详情

1、概述

  • 是什么
    在这里插入图片描述

  • 官网资料

​ 地址

Ribbon目前也进入维护模式

在这里插入图片描述

  • 用途

    LB(负载均衡)

在这里插入图片描述

  • 集中式LB
    在这里插入图片描述
  • 进程内LB

在这里插入图片描述

2、Ribbon负载均衡演示

  • 架构说明

    在这里插入图片描述

总结:

Ribbon其实就是一个软负载均衡的客户端组件, 他可以和其他所需请求的客户端结合使用,和eureka结合只是其中一个实例.
在这里插入图片描述

  • RestTemplate的使用

    • 官网
      在这里插入图片描述

    • getForObject方法/getForEntity方法

        @GetMapping("/consumer/payment/get/{id}")
          public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {
              return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
      }
              
          @GetMapping("/consumer/payment/getForEntity/{id}")
          public CommonResult<Payment> getPayment2(@PathVariable("id") Long id) {
              ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
      
              if (entity.getStatusCode().is2xxSuccessful()) {
                  log.info("#############" + entity.getStatusCodeValue() + "################\t" + entity.getHeaders());
                  return entity.getBody();
              } else {
                  return new CommonResult<>(444, "操作失败");
              }
      }
      
    • postForObject/postEntity

       @GetMapping("/consumer/payment/create")
          public CommonResult<Payment> create(Payment payment) {
              return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
          }
      

3、Ribbon核心组件IRule

IRule:根据特定算法从服务列表中选取一个要访问的服务

在这里插入图片描述
在这里插入图片描述

如何替换

  • 修改cloud-consumer-order80

  • 注意配置细节

在这里插入图片描述

  • 新建package

在这里插入图片描述

  • 上面包下新建MySelfRule规则类

    @Configuration
    public class MySelfRule {
    
        @Bean
        public IRule myRule() {
    
            // 定义为随机
            return new RandomRule();
        }
    }
    
  • 主启动类添加@RibbonClient

    @SpringBootApplication
    @EnableEurekaClient
    @RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
    public class OrderMain80 {
        public static void main(String[] args) {
            SpringApplication.run(OrderMain80.class, args);
        }
    }
    
  • 测试

    http://localhost/consumer/payment/get/31

4、Ribbon负载均衡算法

  • 原理

在这里插入图片描述

  • 源码

        public Server choose(ILoadBalancer lb, Object key) {
            if (lb == null) {
                log.warn("no load balancer");
                return null;
            } else {
                Server server = null;
                int count = 0;
    
                while(true) {
                    if (server == null && count++ < 10) {
                        List<Server> reachableServers = lb.getReachableServers();
                        List<Server> allServers = lb.getAllServers();
                        int upCount = reachableServers.size();
                        int serverCount = allServers.size();
                        if (upCount != 0 && serverCount != 0) {
                            int nextServerIndex = this.incrementAndGetModulo(serverCount);
                            server = (Server)allServers.get(nextServerIndex);
                            if (server == null) {
                                Thread.yield();
                            } else {
                                if (server.isAlive() && server.isReadyToServe()) {
                                    return server;
                                }
    
                                server = null;
                            }
                            continue;
                        }
    
                        log.warn("No up servers available from load balancer: " + lb);
                        return null;
                    }
    
                    if (count >= 10) {
                        log.warn("No available alive servers after 10 tries from load balancer: " + lb);
                    }
    
                    return server;
                }
            }
        }
    
        private int incrementAndGetModulo(int modulo) {
            int current;
            int next;
            do {
                current = this.nextServerCyclicCounter.get();
                next = (current + 1) % modulo;
            } while(!this.nextServerCyclicCounter.compareAndSet(current, next));
    
            return next;
        }
    
  • 自己试着写一个本地负载均衡器

    • 7001/7002集群启动

    • 8001/8002集群启动

      1、controller改造

      @GetMapping(value = "/payment/lb")
      public String getPaymentLB() {
          return serverPort;
      }
      
    • 80订单微服务改造

      1、ApplicationContextBean去掉注解@LoadBalanced

      2、LoadBalancer接口

      public interface LoadBalancer {
          ServiceInstance  instance(List<ServiceInstance> serviceInstances);
      }
      

      3、MyLB

      @Component
      public class MyLB implements LoadBalancer {
          private AtomicInteger atomicInteger = new AtomicInteger(0);
          public final int getAndIncrement() {
              int current;
              int next;
              do {
                  current = this.atomicInteger.get();
                  next = current >= 214743647 ? 0 : current + 1;
              }while (!this.atomicInteger.compareAndSet(current,next));
              System.out.println("##############naext:"+next);
      
              return next;
          }
          @Override
          public ServiceInstance instance(List<ServiceInstance> serviceInstances) {
              int  index= getAndIncrement() % serviceInstances.size();
      
              return serviceInstances.get(index);
          }
      }
      
      

在这里插入图片描述

**4、OrderController**

```java
  @Resource
    private DiscoveryClient discoveryClient;
  @Resource
    private LoadBalancer loadBalancer;

    @GetMapping(value = "/consumer/payment/lb")
    public String getPaymentLB() {
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PROVIDER-SERVICE");
        if (instances == null || instances.size() <= 0){
            return  null;
        }

        ServiceInstance serviceInstance = loadBalancer.instance(instances);
        URI uri = serviceInstance.getUri();
        return  restTemplate.getForObject(uri+"/payment/lb",String.class);
    }

```

**5、测试**

http://localhost/consumer/payment/lb

欢迎转载和分享,记得点赞呀

使用SpringCloud和Ribbon实现微服务负载均衡 SpringCloud是一系列框架的集合,它利用Spring Boot的开发便利性简化了分布式系统基础设施的开发,如服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Cloud的开发模型快速构建。SpringCloud的核心思想是:构建分布式系统时,能够像开发一个简单系统一样方便,通过简单的配置,就能让系统快速启动并运行。在SpringCloud的众多组件中,Ribbon是用于客户端负载均衡的组件。 阅读详情

相关推荐

STM32H743 ADC校准失败排查:HAL_ADCEx_Calibration_Start()的正确调用时机

本文深入剖析了STM32H743 ADC校准失败的核心原因,即错误地在ADC使能状态下调用HAL_ADCEx_Calibration_Start()函数,导致读数漂移。文章详细解释了校准必须在ADC禁用状态下进行的硬件原理,列举了典型错误场景,并提供了上电初始化与周期性重校准的正确代码实践,帮助开发者彻底解决ADC精度问题。

ik678901的博客 1175

SpringCloud Ribbon

Ribbon实现负载均衡概念LB负载均衡是什么Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡Ribbon工作原理引入RibbonRestTemplateRibbon核心组件IRule负载均衡算法默认负载均衡算法替换手写Ribbon负载均衡算法原理源码手写负载均衡算法 概念 Ribbon目前已经进入了维护模式,但是目前主流还是使用Ribbon Spring Cloud想通过LoadBalancer用于替换Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现

fanjia2shao的博客 866

OFDM时频脉冲形状与子载波正交性的理解

从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 ej2πfnte^{j2πf_nt}ej2πfn​t 都被一个矩形窗脉冲gT(t)g_T(t)gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的倒数,这是子载波正交的条件。 ​ 根据时频脉冲形状,可以从时域上理解如左图(注意是矩形脉冲 乘 复指数),从频域上理解如右图(sinc脉冲 卷 频点)。 ​

weixin_43803202的博客 2213

Ribbon负载均衡

1、简介 负载均衡+RestTemplate调用 1.1、功能: Ribbon主要功能是提供客户端的软件负载均衡算法和服务调用。 即,在配置文件中列出Load Balancer 的所有机器,Ribbon会自动的基于某种规则(如简单轮询,随机连接等)去连接这些机器 1.2、LB(Load Balance)负载均衡: 将用户的请求平摊分配至多个服务上,从而达到系统的HA(高可用)。 1.3、集中式与进程式 集中式:在服务消费方和提供方间使用独立的LB设施(...

weixin_44302046的博客 3559

网络调试和分析工具 Proxyman Premium

它支持MacOS、iOS和iPadOS等操作系统,提供丰富的功能,如查看和编辑HTTP/HTTPS请求和响应、设置断点、过滤请求等。Proxyman Premium还支持WebSocket、GraphQL和gRPC等现代网络协议调试,并通过直观且图形化的操作界面,使用户能高效地监控和操纵网络数据流。此外,它还具备多种高级功能,如WebSocket支持、DNS欺骗、自定义SSL证书等,为开发人员提供极大的便利。同时,由于软件版本更新和界面调整,上述步骤可能会有所变化,建议您参考最新版本的官方文档进行操作。

llhf688的博客 1997

9、眼底图像智能分析:糖尿病视网膜病变的自动化识别与分级系统

本博客介绍了一种基于深度学习的糖尿病视网膜病变(DR)自动化识别与分级系统。该系统通过视网膜图像的预处理、数据增强、集成模型的构建与优化,实现了对DR的高效识别与分级。识别系统采用二分类任务,准确率达到97.67%,而分级系统通过四分类策略取得了95.2%的准确率。系统在基层社区和医院中具有广泛的应用前景,为DR的早期筛查和精准诊断提供了有效工具。

pea55的博客 144

springcloud【五】Ribbon 负载均衡策略切换与重写轮询算法

简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 Ribbon 负载均衡的策略包括: 轮询(默认) 随机 加权 … Ribbon 简单地说就是负载均衡 + RestTemplate 调用,最终可以实现RPC的远程调用。 新版的eureka中已经集成了ribbon,所以就另外添加依赖。 一、RestTemplate调用 主要分为get,post两类。 Entity比Object多了一些响应头信息。 getForObject() / getF

qq_40359932的博客 1955

FANUC机器人S523 新款PN板卡与西门子PLC通信配置介绍

FANUC机器人S523 新款PN板卡与西门子PLC通信配置介绍

Robot_PLC_HMI_Automation 348

springcloud搭建配置中心config server服务(一)

在上一篇文章中搭建了eureka服务,现在在项目下创建iot-config服务 pom文件为 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta...

穷水叮咚的博客 810

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3800

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 353

Spring Cloud - 6 (Spring Cloud Feign)

声明式Web服务客户端:Feign 声明式:接口声明、Annotation驱动 Web服务:HTTP的方式作为通讯协议 客户端:用于服务调用的存根 Feign:原生并不是Spring Web MVC的实现,基于JAX-RS(Java REST 规范)实现。Spring Cloud封装了Feign,使其支持Spring Web MVC。RestTemplate、HttpMessageConv...

最怕一生碌碌无为,还安慰自己平凡可贵 3万+

提交 ieee 手稿出现:Do not include the Reviewer PDF with my submission 怎么办

IEEE投稿Reviewer PDF选项说明 投稿时出现的"Do not include the Reviewer PDF with my submission"选项控制是否附带评审专用PDF文件。Reviewer PDF是系统自动生成包含所有投稿材料的完整PDF,用于同行评审。建议保持默认不勾选状态,除非确认编辑部不需要该文件,否则可能影响审稿流程。勾选表示不附带此PDF,不勾选则会正常生成并提交该评审文件。

ZhangJiqun&191cm&85kg 2170

【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

为什么很多公司都开始摒弃Eureka?

懒羊羊的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【微服务 SpringCloud】实用篇 · Ribbon负载均衡

本文主要讲解Ribbon组件的负载均衡策略IRule,原理(查看部分源码);以及饥饿加载!

Carefree_State的博客 5323

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringCloud-Ribbon实现负载均衡

本文从负载均衡的基本概念入手,探讨其在微服务体系中的重要性。详细介绍了在 SpringCloud 中使用 Ribbon 的步骤,包括引入依赖、添加注解和使用 RestTemplate 进行远程调用。通过本文的学习,读者将更好地理解和运用Ribbon,提升微服务架构的性能和可维护性。

踏雨歌青春,诗酒趁年华 2553

SpringCloud Alibaba----02 (微服务的服务之间的远程调用Feign,以及负载均衡Ribbon)

通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。服务端负载均衡指的是发生在服务提供者一方,比如常见的Nginx负载均衡服务端负载均衡而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求客户端负载均衡微服务调用关系中一般会选择客户端负载均衡,也就是在服务调用的一方来决定服务由哪个提供者执行。那问题来:代码上如何实现?

Fuck1269185654的博客 2236

SpringCloud微服务框架03 - Ribbon负载均衡

本系列持续更新中 SpringCloud微服务框架01-SpringCloud简介 SpringCloud微服务框架02-Eureka服务注册与发现 SpringCloud微服务框架03 - Ribbon负载均衡 SpringCloud微服务框架04 - Config统一配置中心 文章中设计到的项目源码,会逐步整理到github上。github除了本系列文章设计到的源码信息,还有Spri...

笑小枫 9530

SpringCloud Ribbon 负载均衡服务调用

详细介绍下 Ribbon 负载均衡服务调用,以及手写负载均衡算法

快乐的小三菊的博客 1598

SpringCloud 学习笔记 —— 六、Ribbon:负载均衡(基于客户端)

SpringCloud 学习笔记 —— 六、Ribbon:负载均衡(基于客户端)

weixin_44553952的博客 2008

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

这篇文章我们讲介绍负载均衡调用组件:Ribbon。❤ Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。...

半旧518的博客 1380

# 从浅入深 学习 SpringCloud 微服务架构(四)Ribbon

从浅入深 学习 SpringCloud 微服务架构(四)Ribbon ribbon:ribbon概述以及基于ribbon的远程调用 ribbon:客户端负载均衡的概述 ribbon:基于ribbon的负载均衡测试 ribbon:负载均衡策略 ribbon:请求重试

段子手168的博客 2125

SpringCloud的Ribbon负载均衡

Spring Cloud Ribbon相关学习: 简介Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项...

菜鸟清风http://www.hphblog.cn/ 5838

负载均衡Ribbon和Feign---SpringCloud

负载均衡Ribbon和Feign Ribbon负载均衡(基于客户端) 6.1 负载均衡以及Ribbon Ribbon是什么? Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。 简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。Ribbon 的客户端组件提供一系列完整的配置项,如:连接超时、重试等。简单的说,就是在配置文件中列出 LoadBalance

Frank---7的博客 14万+

SpringCloud Hoxton——Ribbon负载均衡服务调用

SpringCloud Hoxton——Ribbon负载均衡服务调用

贝尔摩德苦艾酒 7004

SpringCloud之Eureka、Ribbon、OpenFeign

微服务(MicroServices)微服务1. 服务项目中的功能模块(帮助用户解决某一个或一组问题),在开发过程中表现为 IDE(集成开发环境,例如 Eclipse 或 IntelliJ IDEA)中的一个工程或Moudle。2. 微服务体积小、复杂度低(一个微服务通常只提供单个业务功能的服务,代码较少);微服务团队所需成员少(只需要开发人员2到5名即可完成从设计、开发、测试到运维的全部工作)。微服务架构(一种系统架构风格)

caihuayuan4的博客 2109
上一篇: 微服务SpringCloud开弓之Consul服务注册与发现《五》
下一篇: 强软弱虚ThreadLocal
漂吧
博客等级 码龄8年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值