SpringCloud 如何提供Ribbon的IRule的密钥
如果您需要提供自己的IRule实现来处理诸如“ canary ”
测试之类的特殊路由要求,请将一些信息传递给IRule的choose方法。
com.netflix.loadbalancer.IRule.java。
public interface IRule{
public Server choose(Object key);
:
您可以提供一些信息,供您的IRule实现用来选择目标服务器,如以下示例所示:
RequestContext.getCurrentContext()
.set(FilterConstants.LOAD_BALANCER_KEY, "canary-test");
如果您使用密钥FilterConstants.LOAD_BALANCER_KEY将任何对象放入RequestContext中,则该对象将传递到IRule实现的choose方法中。
上例中显示的代码必须在执行RibbonRoutingFilter之前执行。Zuul的前置过滤器是执行此操作的最佳位置。您可以通过预过滤器中的RequestContext访问HTTP标头和查询参数,因此可以用来确定传递到Ribbon的LOAD_BALANCER_KEY。
如果没有在RequestContext中用LOAD_BALANCER_KEY放置任何值,则将空值作为choose方法的参数传递。