Spring Cloud学习笔记(Ribbon):Ribbon的应用样例

这是本人学习的总结,主要学习资料如下
- 马士兵教育

  • 1、Ribbon简介
    • 1.1、架构图
    • 1.2、简单实现负载均衡
  • 2、配置负载均衡策略
    • 2.1、IRule
    • 2.2、使用IRule简单示例
      • 2.2.1、Overview
      • 2.2.1、注入```IRule```
      • 2.2.2、关联```IRule```和服务

1、Ribbon简介

我们都知道Ribbon是用于负载均衡的。提供同一种服务的Client可能有多个,比如有多个User Client提供查询用户信息的服务,使用Ribbon就能简单地达到负载均衡的效果。

1.1、架构图

想要使用Ribbon,无论是服务提供者还是调用服务者都必须作为Client注册到Server中。
在这里插入图片描述

1.2、简单实现负载均衡

如果是使用RestTemplate请求服务,那么可以在RestTemplatebean配置上加上@LoadBalanced注解即可。之后使用RestTemplate调用服务就会自动实现负载均衡。这样的方式是循环轮询的调用服务。

@Configuration
public class RestConfig {@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

现在我们有两个UserClient提供服务,user-client1user-client2。用order-client去调用11次,因为是循环轮询调用,会发现会交替调用user-client1user-client2

这是user-client1user-client2application.yml,大部分配置都一样,只有port不相同。spg.application.name必须一样,不然Ribbon会认为他们不提供同一种服务。

这里他们两都是user-client

spring:application:name: user-client

这是order-client调用的代码。只需要指定spring.application.name,路径和参数即可。

private int i = 0;
@Override
public String getUserInfo(String userId) {return restTemplate.getForObject("http://user-client/getUserInfo?userId=" + i++, String.class);
}

可以看到两个user-client循环提供服务。在这里插入图片描述

在这里插入图片描述



2、配置负载均衡策略

2.1、IRule

IRule是代表规则的接口,它的实现类有RoundRobinRule,即默认调用服务的规则,循环调用。还有RondamRule,随机选取服务调用。

还有其他的策略这里就不一一介绍了。总之IRule及其实现类给我们提供了一些常见的选择策略。大部分情况我们可以选择其中一种直接用,不用再自己写。


2.2、使用IRule简单示例

2.2.1、Overview

  1. 配置IRule的bean,将其中一个实现类注入到Spring中。这里我将选取RandomRule注入。
  2. 将注入的IRule与具体的服务客户端关联起来,让Ribbon知道什么服务器用什么规则。在这里服务者是user-client,我们需要把这个和刚才注入的IRule绑定起来。

通过以上两步就可以自定义负载均衡策略。

2.2.1、注入IRule

@Configuration
public class OrderRibbonRule {@Beanpublic IRule ribbonRule() {return new RandomRule();}
}

2.2.2、关联IRule和服务

在这里我有两台机器提供服务,他们都是spring.application.name=user-client,我们需要将刚才的注入的IRuleuser-client关联起来。

@Configuration
@RibbonClient(name = "user-client", configuration = OrderRibbonRule.class)
public class UserRibbonConfiguration {
}

之后通过http://localhost:9002/createOrder访问多次,可以看到Ribbon随机选取机器提供服务。

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/645156.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析Java的字符串的底层和相关知识(恳请大佬指正)

本期经验和建议的总结: 在拼接字符串的时候,如果大量拼接时建议使用StringBuilder,在转为字符串。 1:Java的号比较的原理: 在Java中,号在对基本数据类型进行比较时,比较的时具体的数值大小例…

基于Google Gemini 探索大语言模型在医学领域应用评估和前景

概述 近年来,大规模语言模型(LLM)在理解和生成人类语言方面取得了显著的飞跃,这些进步不仅推动了语言学和计算机编程的发展,还为多个领域带来了创新的突破。特别是模型如GPT-3和PaLM,它们通过吸收海量文本…

C# winform s7.net expected 22 bytes.”

S7.Net.PlcException:“Received 12 bytes: 32-02-00-00-00-00-00-00-00-00-81-04, expected 22 bytes.” 原因是博图的连接机制未勾选

使用CSS3 + Vue3 + js-tool-big-box工具,实现炫酷五一倒计时动效

时间过得真是飞速,很快又要到一年一度的五一劳动节啦,今年五天假,做好准备了吗?今天我们用CSS3 Vue3 一个前端工具库 js-tool-big-box来实现一个炫酷的五一倒计时动效吧。 目录 1 先制作一个CSS3样式 2 Vue3功能提前准备 3…

Linux SDIO-WiFi 协议栈

Linux SDIO-WiFi 协议栈 1. 简介2. BCMDHD2.1 WiFi模组2.2 驱动初始化(dhd_module_init) 3. Broadcom fullmac WLAN 1. 简介 2. BCMDHD BCMDHD:Broadcom Dongle Host DriverSIP:System In Package 2.1 WiFi模组 2.2 驱动初始化…

嬴图| ISO/IEC-GQL国际图语言标准发布,图技术开启新纪元

GQL作为继SQL之后的第二个数据库查询语言国际标准,近日正式发布。这标志着图技术开启新纪元——图时代即将到来! 同时,这也预示着将有越来越多的组织采用“图”来解决各种复杂问题,更意味着SQL系统与负载将逐渐转向GQL&#xff0…

注意力机制(三)(不同注意力机制对比)

​🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习基础知识》 相关专栏: ⚽《机器学习基础知识》 🏐《机器学习项目实战》 🥎《深度学习项目实…

【Harmony3.1/4.0】笔记五

概念 本文综合row,column作为主要布局,结合image组件,text组件,textimput组件,button组件以及轮播布局搭建登录页面 效果图 ArkTS代码 //登录综合页面 Entry Component struct Five{//添加图片State imgs:Resource[…

C#:变量的更多内容

枚举:一种变量类型,用户定义一组可能的离散值,这些值可以用人们能理解的方式使用。 结构:一种合成的变量类型,由用户定义的一组其他变量类型组成。 数组:包含一种类型的多个变量,允许以索引方…

kubernetes中的附件组件Metrics-server与hpa资源实现对pod的自动扩容和缩容

一、概述 Metrics-Server组件目的:获取集群中pod、节点等负载信息; hpa资源目的:通过metrics-server获取的pod负载信息,自动伸缩创建pod; 二、安装部署 Metrics-Server组件 安装目的,就是给k8s集群安装top…

RustGUI学习(iced)之小部件(二):如何使用滑动条部件

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述…

基于springboot+vue的民法普及系统的设计与实现

1、系统演示视频(演示视频) 2、需要请联系