除了在配置文件中配置Ribbon负载均衡策略之外,还可以通过书写代码的方式来配置。
第一步:创建自定义负责均衡策略类
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;
import java.util.List;
/**
* 自定义Ribbon负载均衡
*/
public class MyRule implements IRule {
private ILoadBalancer lb;
@Override
public Server choose(Object key) {
List<Server> servers = lb.getAllServers();
for (Server server:servers){
System.out.println(server.getHostPort());
}
return servers.get(0);
}
@Override
public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
this.lb = iLoadBalancer;
}
@Override
public ILoadBalancer getLoadBalancer() {
return lb;
}
}
第二步、创建一个配置类,初始化自定义策略
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfiguration {
/**
* 代码配置ribbon负载均衡
* @return
*/
@Bean
public MyRule rule(){
return new MyRule();
}
}
第三步、创建一个Ribbon客户端的配置类,管理BeanConfiguration,用name来指定调用的服务名称
import org.springframework.cloud.netflix.ribbon.RibbonClient;
@RibbonClient(name = "smile-eureka-client",configuration = BeanConfiguration.class)
public class RibbonClientConfig {
}
第四步、如果使用代码配置,记得去掉在配置文件中的策略配置,然后重启服务,访问接口即可