分布式-Ribbon 负载均衡
负载均衡顾名思义,通过一些策略,把大量的请求分配到不同的消费者上,达到负载均衡
本文章接上篇(分布式-Feign 服务调用)
已有资源:注册中心,消费者,服务提供者*2
项目列表:
说明:
服务提供者两个项目唯一不同的是端口不同,其他的相同(包括应用名也相同)
配置位置:两个服务提供者
配置开始:
1.引入依赖
<!-- Ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2.增加配置类:RibbonConfig
@Configuration
public class RibbonConfig {
@Bean
public IRule myRibbonRule(){
//myRibbonRule是因为防止bean重名
return new RandomRule(); //分配策略:随机选择一个server
// return new BestAvailableRule(); //分配策略:选择一个最小的并发请求的server,逐个考察Server,如果Server被tripped了,则忽略
// return new RoundRobinRule(); //分配策略:轮询选择,轮询index,选择index对应位置的server
// return new WeightedResponseTimeRule(); //分配策略:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低
// return new ZoneAvoidanceRule(); //分配策略:复合判断server所在区域的性能和server的可用性选择server
// return new RetryRule(); //分配策略:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
}
@Bean
public IPing ribbonPing() {
return new PingUrl();
}
@Bean
public ServerListSubsetFilter serverListFilter() {
return new ServerListSubsetFilter();
}
}
3.启动接口增加 @RibbonClient(name = “RibbonConfig”, configuration = RibbonConfig.class)
@RibbonClient(name = "RibbonConfig", configuration = RibbonConfig.class)
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class ServiceB2Application {
public static void main(String[] args) {
SpringApplication.run(ServiceB2Application.class, args);
}
}
4.测试:启动服务注册,消费者,服务器提供者*2 ,访问消费者接口
不断访问,可访问到两个服务提供者