自旋锁实现负载均衡规则

177 阅读1分钟

废话

之前写CAS的demo,要自己手开很多线程,现在好了有场景了

当多个线程要从服务中心拉取服务并返回时,想要正确的计数当前的访问次数(计数器在修改时只允许当前一个线程操作,不被其他线程影响),加锁

重量级锁,锁计数器
Synchronized(current)

显示的
lock.lock()
//.....
lock.unlock

反正都是加锁为啥不用悲观锁,因为等待时间短所以更乐观锁适用吧,我猜的,但Ribbon的源码就这么写的

image.png 还有源码里的%取余找下标,这不是没有权值的轮询吗。。为啥叫随机呢

编写

步骤

  1. 获取所有服务
  2. 根据自己编写的规则从服务列表中返回一个
  3. 测试下

获取所有服务

image.png

编写规则

image.png

返回一个服务

image.png

测试

因为之前的restTemplate使用的ribbon的负载均衡所有只能根据服务名调用,所有在ioc中注入一个新的restTemplate的Bean

image.png controller层调用

image.png

image.png

image.png