springcloud 2020.0.x版本移除ribbon后如何修改负载均衡策略

  从 Spring Cloud 2020.0.0-M1 开始,Spring Cloud 废除了这种英国伦敦地铁站的命名方式,而使用了全新的 "日历化" 版本命名方式。

  早在 2018 年,Spring Cloud 在其 Roadmap 里就宣布将要终结的一些库/版本,其中最重要的就是指 Spring Cloud Netflix 项目进入维护模式,然后计划在 2020 年完全移除。

Spring Cloud 做出这样的决定其实也是不见得是主动的。我们知道 Spring Cloud 一直以来把 Netflix OSS 套件作为其官方默认的一站式解决方案,那时的 Netflix OSS 套件恨不得可以跟 Spring Cloud 划等号。而 Netflix 公司在 2018 年前后宣布其核心组件 Hystrix、Ribbon、Zuul、Archaius 等均进入维护状态。

  时至今日,Spring Cloud 2020.0 正式发布,在这个主要版本里,按既定计划终于对 spring-cloud-netflix 动刀了。

  对于Netflix,只保留了其eureka,其他组件全部移除,并给出了推荐替代品。

  

Netflix

推荐替代品

说明

Hystrix

Resilience4j

Hystrix自己也推荐你使用它代替自己

Hystrix Dashboard / Turbine

Micrometer + Monitoring System

说白了,监控这件事交给更专业的组件去做

Ribbon

Spring Cloud Loadbalancer

忍不住了,Spring终究亲自出手

Zuul 1

Spring Cloud Gateway

忍不住了,Spring终究亲自出手

Archaius 1

Spring Boot外部化配置 + Spring Cloud配置

比Netflix实现的更好、更强大

 

  对于初学者,对负载均衡的策略主要是依赖与ribbon提供的七中方案。

image-20210604202556451

  

  SC推荐的loadbalance替换ribbon:

  首先创建配置类(默认的@LoadBalanced为轮询,下面修改为随机):

@Configuration
public class MyConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory){
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory
.getLazyProvider(name, ServiceInstanceListSupplier.class),
name);
}
}

  启动类上加上LoadBalancerClients 后面为自己的配置类:

@SpringBootApplication
@EnableEurekaClient
@LoadBalancerClients(defaultConfiguration = {MyConfig.class})
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
posted @ 2021-06-04 22:15  今夜明珠色  阅读(3024)  评论(0编辑  收藏  举报