ribbon功能测试及源码分析

Ribbon功能测试及源码分析

Ribbon功能测试
  1. 添加依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
  1. 使用ribbon
// 生成bean
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
	return  new RestTemplate();
}

// 注入并使用bean
@GetMapping("testRibbon")
public void testRibbon(String serviceName) {
    String result = restTemplate.getForObject("http://" + serviceName + "/hello", String.class);
}
源码分析
  1. 获取服务组中单个实例
// 测试从多个实例中随机选择实例
@GetMapping("testRibbonRule")
public String getRibbonRule(String serviceName){
    return loadBalancerClient.choose(serviceName).toString();
}
  1. 实例获取算法–轮询
    com.netflix.loadbalancer.AbstractServerPredicate#incrementAndGetModulo
    在这里插入图片描述
    nextIndex是一个原子整形来保证的线程安全
    在这里插入图片描述
负载均很算法
  1. RoundRobinRule
    轮询算法

  2. RandomRule
    随机算法

  3. 权重
    按照权重选择,ribbon自已提供的算法并没有该类算法

  4. iphash
    按照ip区hash选择,ribbon自已提供的算法并没有该类算法

  5. AvailabilityFilteringRule
    过滤掉以下两类服务节点,即选择可用的节点

    • 由于连续连接或读失败而处于断路器触发状态
    • 活动连接超过限制
  6. WeightedResponseRule
    根据响应时间计算权重

  7. RetryRule
    通过重试,获取可用的节点
    在这里插入图片描述

  8. BestAvliableRule
    选取调用量最小的服务

  9. ZoneAvoilableRule
    选取区域亲和性的服务

指定负载均衡策略
  1. yaml中指定
eureka-client-1: # 服务提供者服务名
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡策略全限定名称
  1. 全局策略修改
/**
 * 向容器中放入一个rule对象,任何负载均衡都是用的这个算法
 * 
 * @return
 */
@Bean
public IRule ribbonRule() {
	return new RandomRule();//这里配置策略,和配置文件对应
}
  1. 自定义策略
    实现IRule接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值