Ribbon:简化远程调用实现了负载均衡
负载均衡分为服务端负载均衡和客户端负载均衡
使用Ribbon简化RestTemplate调用
这只是Ribbon的小功能
在RestTemplate上添加注解@LoadBalanced
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
在调用时指定服务名
/**
* 使用Ribbon简化RestTemplate调用
* @param id
* @return
*/
@GetMapping("/goods2/{id}")
public Goods findGoodsById2(@PathVariable("id") int id) {
String url = "http://EUREKA-PROVIDER/goods/findOne/" + id;
Goods forObject = restTemplate.getForObject(url, Goods.class);
return forObject;
}
负载均衡
因为在单机状态,所以需要改变端口实现启动两个Provider服务 8000和8001
需要这样设置不然不能起两个服务
8000端口可以正常访问
8001端口可以正常访问
默认是轮询策略
不停的刷新网页
name后面的端口每次刷新就会变化
Ribbon有负载均衡策略
默认使用轮询
• 随机 : RandomRule (就是随机server)
• 轮询 : RoundRobinRule (顺序执行)
• 最小并发: BestAvailableRule(Eureka访问性能最高的server)
• 过滤: AvailabilityFilteringRule(过滤掉错误节点和并发量最高节点)
• 响应时间: WeightedResponseTimeRule(调用最先响应的节点)
• 轮询重试: RetryRule 如果轮询的服务器不可请求,轮询下一个服务器(轮询次数默认十次,大概就是在来十次)
• 性能可用性: ZoneAvoidanceRule (选择综合性能可用性最高的一个节点)
设置负载均衡策略
-
编码
在消费端编写配置类 可以选择Ribbon策略
在启动类添加@RibbonClient 用于配置目的
-
配置
CTLR+N 搜索类
#配置方式设置Ribbon负载均衡策略
EUREKA-PROVIDER: #设置服务方的应用名称
ribbon:
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule