SpringCloud(12):LoadBalance:自定义负载均衡算法
一、切换随机负载均衡
查看源码可以看到ReactiveLoadBalancer接口下有两个实现。随机和轮询。
![20210126185021611.png][]
(1)切换RandomLoadBalancer,编写配置类:
package com.buba.loadbalancer;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
/**
* 客户端负载均衡配置
*/
public class CustomLoadBalancerConfiguration {
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory
.getLazyProvider(name, ServiceInstanceListSupplier.class),
name);
}
}
(2)@LoadBalancerClients注解设置默认配置文件
package com.buba.springcloud.config;
import com.buba.loadbalancer.CustomLoadBalancerConfiguration;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Configuration 相当于applicationContext.xml
*/
@Configuration
@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
public class ConfigBean {
/**
* @return
* @LoadBalanced 配置负载均衡到RestTemplate
* 把RestTemplate对象交给Spring管理
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
(3)启动测试
重复访问[http://localhost/consumer/dept/list][http_localhost_consumer_dept_list],可以看到数据随机从某个服务提供者中获取:
还没有评论,来说两句吧...