Ribbon是Netflix发布的负载均衡器,协助控制HTTP和TCP客户端的行为;为Ribbon配置服务提供者地址后,Ribbon就可基于负载均衡算法自动地帮助服务消费者去请求。Ribbon默认提供了很多负载均衡算法,例如:轮询、随机等;也可以为Ribbon实现自定义负载均衡算法。
创建消费者工程,命名为Springboot-LoadBalance-consumer2项目,拷贝Springboot-LoadBalance-consumer工程,修改如下内容:
1、启动函数
@EnableDiscoveryClient
@SpringBootApplication
public class MangoConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MangoConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
备注:@LoadBalanced注解的作用是对服务开启负载均衡,默认的负载均衡方式是轮询。
2、添加服务
新建一个控制类,注入RestTemplate,并调用服务提供者hello服务。
@RestController
public class RibbonHelloController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/ribbon/call")
public String call() {
String callServiceResult = restTemplate.getForObject("http://mango-producer/hello", String.class);
return callServiceResult;
}
}
备注:使用http:// service-producer/hello调用服务, service-producer为注册的服务名称,LoadBalancerInterceptor会拦截调用并根据服务名找到对应的服务。
3、测试
在浏览器中连续两次使用http://localhost:8006/ribbon/call调用服务,得到结果如下:
说明ribbon负载均衡已经成功启动了。
4、ribbon负载均衡策略配置方式
(1)在配置类中注入一个新的IRule(举例为随机均衡策略,当然这种为全局进行配置,也就是该服务中得分所有规则都将采用配置得负载均衡规则。)
@Bean
public IRule randomRule(){
return new RandomRule();
}
(2)在yml文件中进行配置(这样得配置可以针对某一个服务改变他得负载均衡策略,以下图中就只针对了service-producer服务及逆行配置,也就是说在本服务下,只有service-producer采取随机负载均衡策略,其他得服务还是轮询负载均衡策略。)
service-producer:
ribbon:
NFLoadBalancerRuleClassName:
com.netflix.loadbalancer.RandomRule #负载均衡规则