springcloud服务通讯下-Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。

其他使用ribbon的有

  • RestTemplate
  • Feign
  • Zuul

lb规则

上次讲过几种实现lb的几种,使用@LoadBalanced 和LoadBalancerClient 都是基于Ribbon实现的
本文主要围绕ribbon展开讨论

    /**
     * 使用LoadBalancerClient 通过应用名称获取url 然后用restTemplate访问
     * @return
     */
    @GetMapping("/lbmsg")
    public String lbMsg() {
        RestTemplate restTemplate = new RestTemplate();
        ServiceInstance instance = loadBalancerClient.choose("PRODUCT");
        String url = String.format("http://%s:%s", instance.getHost(), instance.getPort(),"/msg");
        String result = restTemplate.getForObject(url, String.class);
        log.info("response={}", result);
        return result;
    }

通过源码 可以找到
在这里插入图片描述
因为我开了两个server 现在serverlist显示就是2个,这个是ok的

在看下,默认的负责规则是什么,源码中默认的是

    private static final IRule DEFAULT_RULE = new RoundRobinRule();


打了断点,看了一下
test
这里的rule默认是随机的

果然是 RoundRobinRule

日志答应结果也是轮询的.
在这里插入图片描述
那么其他规则呢?

lb规则类型

在这里插入图片描述

  • RoundRobinRule

最基础的轮询算法–默认使用的算法。

  • RandomRule

见名知意,随机选取。

  • AvailabilityFilteringRule

会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务。然后对剩余的服务列表按照轮询策略进行访问。

  • WeightedResponseTimeRule

根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时如果统计信息不足,会使用 RoundRobinRule策略。等统计信息足够,会切换到WeightedResponseTimeRule。

  • RetryRule

先按照 RoundRobinRule策略获取服务,如果获取服务失败则在指定时间内会进行重试获取可用的服务。
BestAvailableRule

会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选取一个并发量最小的服务。

  • ZoneAvoidanceRule
    复合判断Server所在区域的性能和Server的可用性来选择服务器。

自定义lb规则

  1. 配置文件配置
service-provider-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
  1. 通过自定义配置也可以

@Configuration
public class RibbonConfiguration {
 
    @Bean
    public IRule ribbonRule() {
        // 负载均衡规则,改为随机
        return new RandomRule();
    }
@RibbonClient(name = "service-provider-user", configuration = RibbonConfiguration.class)
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值