【你好Ribbon】二:Ribbon初识-让你感受它的美

每日一句:

编写 Java 开发包都是一群神人,拿 Java 源码来分析问题,我们无疑站在了巨人的肩膀上。所谓站得高,尿的远也。当然,所谓偷拍都是避免不了的

写在前面的话

经过了上节的介绍我们对Ribbon有了一个整体的认识,最起码知道了它是干什么用的 在微服务中扮演什么角色。这一点至关重要,因为我们知道它是做客户端负载的 肯定就会去想 它是怎么做负载的? 例如你会问 它是怎么选择服务器的?怎么动态更新服务列表的?怎么做重试策略的?等等!好了 从今天开始 我们带着这些问题去探索一下Ribbon是怎么处理的。

演示版本

我们知道Ribbon的最新版本是2.7.18 ,但是我们不用这个版本。我们选取版本的时候还要结合当前的大环境,什么大环境?当然是当之无愧的大哥大springcloud。我们翻阅了一下即使是当前最新的Hoxton.SR8版本 spring依然用的Ribbon2.3.0版本。值得注意的是 2.3.0版本还是强依赖Archaius的。如果对Archaius不是很熟悉的可以去看一下另一个专栏文章 你好Archaius!那有人又会问了: 你管他依赖什么版本呢 你选一个新的 在未来等着他!好想法,但是,但是上一篇不是说了嘛 人家SpringCloud要玩自己的了,嫡长子出生了怎么可能还把大权交给一个庶出的。所以我们依然选用2.3.0版本。

这里再多说一句,ribbon从2.4.0开始就不强依赖Archaius了。如果感兴趣 可以下面自己拉下来原来研究。

Ribbon初体验

话不多说 我们直接上代码给大家感受一下 怎么使用。大家不用搞清楚为什么这样写只需要有一个大致的印象 有这么个玩意。 总而言之就是给大家用代码演示他是干什么。我们后续章节会跟随我们的程序进入深入探索。

程序代码:

    List<Server> serverList = new ArrayList<>();
    serverList.add(new Server("www.coredy1.com", 1));
    serverList.add(new Server("www.coredy2.com", 2));
    serverList.add(new Server("www.coredy3.com", 3));
    BaseLoadBalancer loadBalancer = LoadBalancerBuilder.newBuilder().buildFixedServerListLoadBalancer(serverList);
    for (int i = 0; i < 6; i++) {
      LoadBalancerCommand<String> balancerCommand = LoadBalancerCommand.<String>builder()
      .withLoadBalancer(loadBalancer).build();
      ServerOperation<String> operation = server -> Observable.create(t->{
        t.onNext(server.getHost());
        t.onCompleted();
      });
      String single = balancerCommand.submit(operation).toBlocking().single();
      System.out.println(single);
    }

输出结果:

www.coredy2.com
www.coredy3.com
www.coredy1.com
www.coredy2.com
www.coredy3.com
www.coredy1.com

上面这一段代码我就不注释了

  • serverList这个变量保存了我们所有备选的server,就是我们上一节说的客户端负载均衡是在本地维护了一个服务列表
  • BaseLoadBalancer是一个最基础的负载均衡器,仅提供基础的能力。我们把serverList交给负载均衡器
  • LoadBalancerCommand我们暂且可以把它理解成对一个请求的封装
  • ServerOperation字面意思就是对server的操作。再挖深一点就是负载均衡器把选择好的Server给我们 我们拿着这个Server做什么。例如向这个Server发起Http请求?发TCP请求?这样是不是就通了?

用过Hystrix的同学都知道这个写法和Hystrix很像 都是使用命令模式来包装。没错 谁让别人是一家公司出的呢。
例子中看不出具体的负载均衡策略,当然如果真的看出了内部的策略 那说明对外的API封装的有问题,太复杂了 不友好。但是从结果我们知道负载均衡是生效了的,并且是轮询的策略,每台机器出现的概率都是均等的。

所以Ribbon是不是很简单,就是实现这么一个玩意。是不是心里在想就这么一个玩意还好意思单独拎出来搞个项目!其实暴露给用户的东西越简单内部实现越复杂。再说人家LB只是Ribbon其中的一个模块而已。(后面我们提到Ribbon默认就把ribbon等同于负载均衡了)

结束语

我们对Ribbon体验就到这,相信看demo 相信大家一定会有一些感触。值得注意的上面的demo我们后面还会不止一次的用到。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值