Spring Cloud学习笔记(四)负载均衡客户端Ribbon

springboot集成spring loadbalancer实现客户端负载均衡 客户端负载均衡 阅读详情

在Spring Cloud的体系中,实现服务调用的负载均衡有两种方式,一种是让你的RestTemplate有用负载均衡的功能,也就是ribbon + RestTemplate的方式;另外就是使用feign客户端。

ribbon目前进入维护期,官方推荐的是:BlockingLoadBalancerClient ,但是网上看了某大牛的分析(https://my.oschina.net/giegie/blog/3095354),还是推荐消停用ribbon先

In order to use a load-balanced RestTemplate, you need to have a load-balancer implementation in your classpath. The recommended implementation is BlockingLoadBalancerClient - add org.springframework.cloud:spring-cloud-loadbalancer in order to use it. The RibbonLoadBalancerClient also can be used, but it’s now under maintenance and we do not recommend adding it to new projects.

RestTemplate通过注解配置可以直接拥有负载均衡的功能。

RestTemplate can be automatically configured to use a Load-balancer client under the hood. To create a load-balanced RestTemplate, create a RestTemplate@Bean and use the @LoadBalanced qualifier

先基于之前的工程改造代码,变成这个样子

其中service-consumer是服务调用方,service-provider-a和service-provider-b是服务提供方。其中两个service-provider的配置文件相同,只有端口不同,服务名称也叫做一个,如下图:

server:
  port: 9001 #另外一个为9002
spring:
  application:
    name: service-provider #应用名称,会显示在eureka server中

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8100/eureka/ #eureka server地址

接下来编写服务提供方的接口从而对外提供服务。代码如下,输出服务提供方端口号。

package org.dothwinds.serviceprovider.controller;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ServiceProviderController {
    @Value("${server.port}")
    private int port;

    @GetMapping("/service")
    public String sayHello(){
        return "service from port:" + port;
    }
}

启动eureka server和两个服务提供方,查看服务注册的情况。

没有问题,接下来我们编写一下service-consumer的代码。启动类,注入RestTemplate,加上对应的注解。

package org.dothwinds.serviceconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudStudyServiceConsumerApplication {

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

	//注入restTemplate
	@Bean
	@LoadBalanced
	public RestTemplate getRestTemplate(){
		return new RestTemplate();
	}

}

编写Controller,调用服务测试,代码如下:

package org.dothwinds.serviceconsumer.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ServiceConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/testLoadBalance")
    public String serviceCousumer(){
       return restTemplate.getForObject("http://SERVICE-PROVIDER/service", String.class);
    }
}

启动Consumer服务测试:

重复刷新页面,可以看到9001和9002交替显示出来,说明consumer的调用负载均衡生效了,每次请求到了不同的service provider上。
 

此时的架构流程,如下图:

参考资料:https://cloud.spring.io/spring-cloud-static/Greenwich.SR5/single/spring-cloud.html

代码地址:https://gitee.com/dothwinds/Spring-Cloud-Study/tree/master/spring-cloud-study-ribbon

spring cloud中使用Ribbon实现客户端的软负载均衡 开篇 本例是在 springboot整合H2内存数据库,实现单元测试与数据库无关性 和 使用RestTemplate消费spring boot的Restful服务 两个示例的基础上改造而来 在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件 阅读详情

相关推荐

Java领域Spring Cloud Ribbon负载均衡实战

本文旨在全面解析Spring Cloud Ribbon的负载均衡实现机制,提供从基础概念到高级特性的完整指南。内容涵盖Ribbon的核心算法、配置方式、与Eureka的集成以及性能优化策略,适用于需要在微服务架构中实现高效服务调用的开发者。文章首先介绍Ribbon的基本概念和架构,然后深入分析其核心算法和配置方式,接着通过实战案例展示具体应用,最后讨论性能优化和未来发展趋势。客户端负载均衡:负载均衡决策在服务消费者端执行的模式服务发现:动态获取服务实例信息的机制服务注册中心。

AI开发架构师 786

springcloud值ribbon打印WARN日志You already have RibbonLoadBalancerClient on your classpath. It will be us

在使用springcloud ribbon做客户端负载均衡的时候控制台打印如下日志: You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use

OceanSky的专栏 1万+

【springcloud 微服务】Spring Cloud Ribbon 负载均衡使用策略详解

springcloud中ribbon负载均衡策略总结

congge_study的博客 7685

SpingBoot Cloud LoadBalancer问题解决

记录一次解决SpringBoot Cloud之网关负载均衡的问题

pinguan0624的博客 2215

Spring Boot 整合Spring Cloud Ribbon:客户端负载均衡

在微服务架构中,服务之间的调用是非常频繁的。为了提高系统的可用性和性能,负载均衡是必不可少的技术。Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以帮助我们在客户端实现负载均衡,从而更好地调用多个服务实例。本文的目的是详细介绍如何在Spring Boot项目中整合Spring Cloud Ribbon,实现客户端负载均衡。范围涵盖了从基本概念的讲解到实际项目的开发和部署,以及相关工具和资源的推荐。

AI开发架构师 1111

rv1126平台spi屏调试

st7789v2 i2c调试

zuoanyouzhuan_的博客 2038

java负载均衡解决方案_SpringCloud微服务(Fegin负载均衡遇到的问题和解决方案)...

Completed shut down of DiscoveryClientYou already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to ...

weixin_42430341的博客 802

NBIS单细胞教程:差异基因(五)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是对不同集群之间的差异基因进行分析。参考来源:https://github.com/NBISweden/workshop-scRNAseq/blob/master/labs/seurat/seurat_05_dge.Rmd感兴趣的话可以阅读原文。

songyi10的博客 1万+

Spring Cloud Loadbalancer 的使用

介绍四种负载均衡策略的使用

YeZh1Yong 的博客 2679

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

m0_71589036的博客 89

23、视频时间码与数字同步技术详解

本文深入解析了视频时间码与数字同步技术的核心原理及应用。涵盖线性时间码(LTC)和垂直间隔时间码(VITC)的结构与特性,详细阐述了降帧时间码的补偿机制及其在影视制作中的重要性。文章还介绍了定时参考信号(TRS)在SDTV和HDTV中的实现方式,分析了辅助数据的传输结构与发展趋势,并探讨了SDI编码技术及其在不同视频标准下的差异。通过实际应用场景和技术发展影响的剖析,全面展示了这些关键技术如何支撑现代视频系统的高效运行与持续创新。

wine的专栏 237

Spring Cloud 负载均衡 Ribbon实现

Spring Cloud组件中常用的组件里也包含了Ribbon,做负载均衡功能。 目录 (一)简介 (二)实现 1.配置多个服务端 2.配置ribbon (三)Ribbon和Nginx对比 (一)简介 spring Cloud Ribbon是一个客户端的负载均衡器,它提供对大量的HTTP和TCP客户端的访问控制。 客户端负载均衡即是当浏览器向后台发出请求的时候,客户端会...

harryptter的专栏 2万+

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

本文主要介绍了Couldn’t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案,希望能对使用winscp的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 4万+

【Spring Cloud】分布式必学springcloud(四)——客户端负载均衡Ribbon

一、前言       前几篇博客,对springcloud的注册中心Eureka做了说明,并且提供者可以注册到注册中心上,客户端可以面向服务的调用Restful接口。有的时候我们需要对提供者做负载均衡,SpringCloudRibbon就为我们提供了负载均衡调用。下面我们就来见识一下Ribbon。 二 、Ribbon是什么? ......

哈士奇 1万+

YOLO12涨点改进| 损失函数改进篇 |AAAI 2025| 一种小目标检测SDLoss损失函数,解决现有损失函数对不同目标尺度敏感度不足的局限,提高了网络检测不同尺度目标的敏感能力,助力高效涨点

本文提出了一种改进的小目标检测方法SDLoss,通过动态调整尺度损失与位置损失的权重,优化了YOLOv12模型的性能。针对红外小目标检测中存在的两个主要问题:1)标准卷积难以捕捉目标的高斯空间分布特性;2)现有损失函数对不同尺度目标的敏感度不足,研究团队开发了Pinwheel-shaped卷积(PConv)和Scale-based Dynamic损失函数(SDLoss)。PConv通过不对称卷积核设计显著提升感受野,SDLoss则根据目标大小动态平衡尺度与位置损失的影响。

Ai缝合怪、助力小伙伴高效发论文 238

《UDS协议从入门到精通》系列——图解0x2E:通过ID写数据

图解数据包格式+直观的通信示例,迅速认识0x2E服务!!

车载系统攻城狮 3602

Spring Cloud Ribbon 负载均衡详解

负载均衡(Load Balance): 将用户的请求通过使用各种算法来确定分配请求的最佳方式,将这些请求分配到多个服务器上运行,从而防止任何一个资源过载或失效而导致应用程序的性能下降或停止响应。在任何一个系统中,负载均衡都是一个十分重要且不得不去实施的内容,它是系统处理高并发缓解网络压力和服务端扩容的重要手段之一Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则实现类负载均衡策略按照线性轮询策略,即按照一定的顺序依次选取服务实例RandomRule。

qq_60972641的博客 1753

从零开始理解Linux中断架构(1)-前言

前段时间在转行手撸WIFI路由器,搞wifi路由器需要理解网络驱动程序,以太网卡驱动程序,无线WIFI驱动程序,而网卡驱动的关键路径就在中断程序中,需要了解NIC设备驱动程序如何收发数据,为了彻底的知道数据包是如何二层传递上来的,又需要了解一点Linux中断系统。第一次看到这张表是无感的,大概能够看懂的就是那个中断次数,因为不停的cat,这个数值会一直不停的增加。第一列是逻辑中断号,第二三列是中断次数,第四列是中断控制器的名字,第五列是硬件中断号,第六列 中断类型,第七列是 中断源关联设备。

maxleng的专栏 881

Spring cloud 之ribbon与eureka – 发生在客户端的负载均衡

之前一直在做一些针对APM的深入测试,其中就涉及到了对分布式为服务系统的分布式追踪的测试。所以,有必要了解一下现在比较流行的微服务框架,并进行一些实地测试,之前转了一篇文章:Dubbo和Spring Cloud微服务架构的比较,已经让我们对dubbo和spring cloud有了一定的了解。因为elastic APM目前只能对基于HTTP的API进行追踪,因此对于dubbo这种基于自有协议进行RP...

点火三周的专栏 4422

STM32F407中文手册

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Cloud Ribbon源码解析

负载均衡就是用来帮助我们将众多的客户端请求合理的分配到各个服务器,以达到服务端资源的充分利用和更少的请求时间,它是日活亿级用户的网站架构中最重要的手段。而Ribbon实现正向代理的软负载均衡,Spring cloud Feign默认集成Ribbon,所以注解@FeignClient的类,默认实现了ribbon的功能,在之前的spring cloud-feign源码中已经提过LoadBalancer...

布道 5458

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring Cloud Feign【源码篇】Feign 如何调用Ribbon进行客户端负载均衡

参考资料:Spring Cloud 官网 相关版本:Spring Boot 2.1.5.RELEASE 、Spring Cloud Greenwich.SR 回顾 在 Spring Cloud Feign【源码篇】Feign 如何进行服务间请求调用 中,提到了 Feign 如何进行服务调用的。 Feign 在封装了相关的请求参数 RequestTemplate 后,发起服务远程请求调用。 ...

保持敏感!保持学习! 5927

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring Cloud Netflix Ribbon:微服务的客户端负载均衡利器

本文深入探讨了Ribbon在微服务架构中的核心作用与实现原理。Ribbon作为客户端负载均衡组件,通过与Eureka协作解决服务实例选择问题,提供轮询、随机等7种内置策略并支持自定义。文章详细解析了Ribbon的集成步骤、负载均衡策略配置、重试与超时控制等高级特性,并对比了Ribbon与 LoadBalancer的差异。虽然Ribbon已停止维护,但理解其工作原理仍是掌握微服务通信机制的重要基础。文中包含完整的实战示例和常见问题排查指南,帮助开发者构建高可用的微服务系统。

a15585391608的博客 1531

spring cloud ribbon - 负载均衡

1.关键字    负载均衡 2.基本介绍    上一次讲到远程调用的客户端feign,feign的主要功能就是远程对象的本地代理或者用于远程调用的httpClient,减化远程调用的复杂性,让本地调用远程方法如同调用本地方法一样简单方便。但是在集群环境,远程服务可能有多个可用节点,那么调用时就需要负载均衡。ribbon是一个提供客户端负载均衡算法的策略库。       负载均

老杨叔叔 3万+

Spring Cloud Ribbon

祝大家每日进步,有技术问题多多交流,同时欢迎大家关注我的头条号:IT人孙会良 Spring Cloud Ribbon 一.Sping Cloud Ribbon概述 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡.................................

sunhuiliang85的专栏 6273

Spring Cloud Alibaba之负载均衡组件 - Ribbon

负载均衡 我们都知道在微服务架构中,微服务之间总是需要互相调用,以此来实现一些组合业务的需求。例如组装订单详情数据,由于订单详情里有用户信息,所以订单服务就得调用用户服务来获取用户信息。要实现远程调用就需要发送网络请求,而每个微服务都可能会存在有多个实例分布在不同的机器上,那么当一个微服务调用另一个微服务的时候就需要将请求均匀的分发到各个实例上,以此避免某些实例负载过高,某些实例又太空闲,所以在这...

beishuibo1517的博客 5838

Spring Cloud 应用篇 之 Ribbon 的基本使用

上一篇文章初步体验了 Eureka 的基本使用,讲了关于服务的注册与发现。这一篇主要讲解基于 Ribbon 实现的服务调用。(一)简介Spring Cloud Ribbon 是一个基于 Http 和 TCP 的客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。客户端负载均衡即是当浏览器向后台发出请求的时候,客户端会向 Eureka Server 读取注册到服务器的可用服务信息列表...

永不止步 4286
上一篇: 十分钟搞定Windows10 Docker环境
下一篇: Spring Cloud学习笔记(五)Feign客户端
呼吸先生
博客等级 码龄21年 57粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值