自定义IRule
本文,我们通过IRule接口,实现一个自定义的负载均衡策略——一致性哈希。
关于一致性哈希原理不是本文探讨的重点,如果不了解的同学可以看下这篇文章《一致性哈希算法的原理与实现》,写的还是挺不错的。
一致性哈希不仅在负载均衡的领域,在很多其他的领域都有广泛的应用。
我们废话不多说,直接开干!
首先我们在ribbon-consumer的模块下,创建一个类并继承AbstractLoadBalancerRule和实现IRule接口:
然后从上下文中获取HttpServletRequest对象:
HttpServletRequest request = ((ServletRequestAttributes)
Objects.requireNonNull(RequestContextHolder
.getRequestAttributes()))
.getRequest();
我们通过request对象,获取一个作为摘要的信息,这里我们就采取uri作为摘要:
String uri = request.getServletPath() + "?" + request.getQueryString();
我们我们定义route方法,来实现寻找server的逻辑:
public Server route(int hashId, List<