回顾
上一遍总结了注册中心的作用,咱们继续总结一下ribbon的作用。
什么是Robbin
Ribbon是一个客户端负载均衡器,可以让您对HTTP和TCP客户端的行为进行大量控制,功能如下:
- 负载均衡
- 容错
- 异步和反应模型中的多协议(HTTP,TCP,UDP)支持
- 缓存和批处理
Robbin有什么用
先回顾一下之前的业务,之前只有一家外卖。
现在有两家外卖
现在你的问题就来了,现在这么多选择,我到底该选哪一家呢?此时如果你有选择恐惧症的话,正好。请个秘书,这种点餐的小事情就交给他做了。这个秘书常见的点餐手法就是轮询,一家一家挨着来点,雨露均沾就是这个意思。
启动两个user-service实例
一个8081,一个8082
eureka监控面板
配置user-consumer的负载均衡
无需单独添加依赖,因为在eureka中已经依赖了。
在RestTemplate bean上加上@LoadBalanced注解就ok
修改UserDao,不再手动获取ip和端口,而是直接通过在eureka中注册的服务名称调用:此处为USER-SERVICE
重启user-consumer,访问http://localhost:8080/consume?id=1
以上就已经开启了user-consumer负载均衡,真的是超级简单。
测试负载均衡策略
打印结果:
以上结论得出,确实是轮询机制。一个一个的来。
修改负载均衡策略
将策略改成随机
再次运行结果
关掉一个user-service服务测试
访问第一次,发现报错了。
说明ribbon正好随机到刚才关闭的实例。这种情况明显不是我们想看到的,能不能达到这种效果:ribbon自动判断该实例服务是否可用,如果不可用的话,自动去访问另一个实例,如果还不可用,继续去连另一个。
ribbon当然有这种重试功能,作为一个秘书,这点能力是必须的。
开启ribbon重试功能
加入retry依赖
加入日志依赖
配置application.yml
关掉一个user-service,测试
打印的重试次数=1。并没有报错。这样一来就可以保证另一台挂了,也不影响其它实例的正常使用。
总结
Ribbon是一个客户端的负载均衡器,用于保证客户端调用集群服务的高可用性。