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


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

    1、Ribbon简介

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

    1.1、架构图

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

    1.2、简单实现负载均衡

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

    @Configuration
    public class RestConfig {
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    现在我们有两个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
    
    • 1
    • 2
    • 3

    这是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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以看到两个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 {
        @Bean
        public IRule ribbonRule() {
            return new RandomRule();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2.2、关联IRule和服务

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

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

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

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    第21章 Spring事务管理之扩展篇(三)
    11.4 - 每日一题 - 408
    【每日一好题】这么经典的题你不能不会:矩阵置零
    docker参数大P与小p的区别
    做转子力学分析,你选APDL还是Workbench仿真?
    项目讲解之常见安全漏洞
    什么是幂等性?四种接口幂等性方案详解!
    vue3 如何将页面生成 pdf 导出
    图片服务器(2)
    进程和线程【详细总结】
  • 原文地址:https://blog.csdn.net/sinat_38393872/article/details/137756266