欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springcloud学习-Ribbon负载均衡

程序员文章站 2024-03-22 18:55:58
...

Ribbon是什么?

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具
Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。

负载均衡?

所谓的负载均衡就是将用户的请求平均到多个服务上,从而达到系统的HA(高可用)

Ribbon使用

  • 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心(集群)
  • 服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用
  1. 首先引入Ribbon依赖,Ribbon的使用依赖Eureka
<!--        Ribbon-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
<!--        eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
  1. 在Eureka Client(Eureka客户端)也就是我们的服务消费者,为RestTemplate配置类添加@LoadBalanced注解即可,如下:
@Configuration
public class ConfigBean {

    /*配置负载均衡实现RestTemplate*/
    @Bean
    @LoadBalanced   //Ribbon注解
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}
  1. 使用了Ribbon后,我们可以根据服务的名字来访问,这样可以直接调用服务,不必再担心IP跟端口的问题,如下:
@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;


//    private static final String Rest_URL_PREFIX = "http://localhost:8001";  //以前的写死了ip和端口号
    private static final String Rest_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";  //使用Ribbon后根据服务名字来访问,不需要指定ip和端口

}

自定义Ribbon的负载均衡策略

  1. 自定义策略应该放在最外面的一层

Ribbon官方文档给出警告:
这个自定义的类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是我们达不到特殊化指定的目的了。

  1. 添加自定义策略
/*
自定义Ribbon负载均衡策略 内容未写
 */
public class Rule extends AbstractLoadBalancerRule {
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    @Override
    public Server choose(Object o) {
        return null;
    }
}
@Configuration
public class MyRule {
    public IRule myRule(){

        /*
        return new RandomRule();为Ribbon默认的负载均衡策略 轮询
         */
        return new Rule(); //调用自定义Ribbon负载均衡策略
    }
}
  1. 在启动类添加相关配置,如下:
@SpringBootApplication
// 启动Eureka
@EnableEurekaClient
// @RibbonClient在启动时加载自定义Ribbon策略 name:负载均衡的微服务名称,configuration:自定义Ribbon策略
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = MyRule.class)
public class DeptConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumerApplication.class, args);
    }
}
相关标签: springcloud 学习