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();
    }
}

现在我们有两个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 {
    @Bean
    public 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随机选取机器提供服务。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值