Ribbon+LoadBalance
ribbon是一套客户端的负载均衡工具。主要提供客户端的负载均衡算法和服务调用。当调用服务时ribbon会自动的帮助你基于某种规则(轮询、随机)去链接机器调用服务。我们也可以使用ribbon实现自定义的负载均衡算法。Ribbon是客户端的负载均衡,Nginx是服务器的负载均衡。
pom依赖
eureka自带了ribbon依赖,所以只需加入eureka客户端依赖。
Ribbon要结合RestTemplate实现远程调用
/*** 配置RestTemplate* 使用@LoadBalanced 默认轮询的负载均衡策略*/@Configurationpublic class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}}
@RestControllerpublic class OrderController {@Resourceprivate RestTemplate restTemplate;public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";@GetMapping("/login/{admin}/{password}")public Result<Users> orderLogin(@PathVariable String admin,@PathVariable String password){String login_url = PAYMENT_URL+"/sent/user/login/"+admin+"/"+password;//使用restTemplate实现远程调用服务Result<Users> result = restTemplate.getForObject(login_url,Result.class);return result;}}
自定义ribbon负载均衡算法
自定义的ribbon负载规则不能放在@ComponentScan所扫描的包下以及子包下,也就是说不能放在主启动类所在的包内,要与主启动类所在包并列。利用IRule设置规则
@Configurationpublic class MyRandomRule {@Beanpublic IRule myRule(){return new RandomRule();}}
,在主启动类加上
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRandomRule.class)
以下为Ribbon均衡负载规则的类型。
在spring-cloud后eureka移除了ribbon。需要使用LoadBalance来设置自定义的负载均衡。eureka自带了LoadBalance依赖,所以只需加入eureka客户端依赖。和ribbon一样需要配置RestTemplate实现远程调用。
自定义LoadBalance负载均衡策略
/*** 自定义随机负载均衡策略*/public class MyRandomRule {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory){String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}}
创建RestTemplate时加上自定义负载均衡策略
/*** 配置RestTemplate* 使用@LoadBalanced 默认轮询的负载均衡策略*/@Configuration@LoadBalancerClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRandomRule.class)public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}}