重新定义pre过滤器 实现ribbon自定义策略负载均衡。

接着上一篇文章,现在来看看如何使用ribbon切换负载均衡规则和使用自定义的负载均衡。

对于zuul过滤器,有四个过滤器,pro(前置)、route、post(后置),error(异常)。如果不清楚的可以去了解下zuul的机制。

对于一个请求正确的经过zuul是 pro --->route --->post。那么我们就利用这个机制,来做一些改造。

一、改造pre 

这个我会在request请求头中去添加一个zuulRequestheader,scope为 sup-end。

二、自定义规则

我创建了一个类使用MyselfRule继承了abstractLoadBalanceRule,重写了choose()和initWithNiwsConfig()方法。我定义的choose(),就是去拿到当前的请求头,拿到刚才的数据,并取出scope(),如果是我要的值,那么我就让他进入服务列表的第一个,如果不是那么就进入第二个。

然后定义了一个类为ribbon的配置类,

最后在请求入口添加了一个注解@RibbonClients,我主要用这个注解是为了如果有多个不同的服务,使用不同的策略。如果仅仅使用value里面的注解,只能声明一个,而且还会导致一些问题,这个问题我还没去测试研究,只是,在查阅资料的时候,看到其他大神说的,没有具体去测试。

最后启动项目,测试结果为:

我访问三次,都会转发到8010.(我在上一篇配置的服务列表),成功使用了定制的策略进行负载均衡。

三、如何使用ribbon内置的策略

只需要修改new 一个ribbon中内置的七种策略机制。

其实我上面是想解决一下 同一个token的访问同一个服务。这边我的思路是,重写zuul 的pre这个过滤器,在请求头设置一个标识,表明这个token上次访问的是那个host的哪个port。然后重写post过滤器,在post过滤器中将这些设值。在自定义策略机中拿到请求头判断,给这个token分配service。同时还有一个思路就是在自定义的逻辑里面,拿到每次访问的token值,然后用某种算法,能够得到唯一的值分给不同的特定的机器。

上面的就是我基于这个思路做的一个小小的测试,想分享给大家。

猜你喜欢

转载自blog.csdn.net/qq_29648387/article/details/83588644
今日推荐