本文共 1543 字,大约阅读时间需要 5 分钟。
通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用非常简单,只需要如下两步:
▪️服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。
▪️服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。
org.springframework.cloud spring-cloud-starter-netflix-ribbon
2.在配置类中的RestTemplate注入bean上加入注解@LoadBalanced
@Configurationpublic class configproperties { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }}
3.之后修改远程调用的方式,其原来url直接指定ip改为指定服务名(producerService为服务名)
@RequestMapping("/LoadBalanced/{id}")public String getId1(@PathVariable String id){ String url = "http://producerService/test/"+id; String id1 = restTemplate.getForObject(url,String.class); return "服务端返回ID为"+id1;}
其原理为:在RestTemplate注入bean类上加入了@LoadBalanced,此时通过RestTemplate的请求会被拦截,取到其对应的访问的url地址,然后将其url地址中的服务名取出,通过负载均衡算法从Eureka中取到对应符合条件的实例对象即ServiceInstance,从中取到ip和端口,之后将其替换到要请求的url中,之后给RestTemplate进行请求。
4.负载均衡底层默认使用轮询算法,若不想使用该算法可以在application.yml中指定对应的算法
Ribbon 自带的负载均衡策略有如下几个:
样例如下:
users: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
样例指定的算法为WeightedResponseTimeRule
转载地址:http://azji.baihongyu.com/