zoukankan      html  css  js  c++  java
  • SpringCloud04-Ribbon :负载均衡

    Ribbon :负载均衡

    负载均衡

    分布式系统中,客户端需要调用提供者,提供者在多态注册中心中存在,客户端任意调用一个服务器均可以完成;为了使每一台注册中心不用太忙也不要太闲,可以负载均衡调用每一台注册中心,可以提升网站的健壮性。

    常见的负载均衡的算法

    • 轮询:为第一个请求选择正常运行中的注册中心的第一台服务(注册中心),然后按顺序依次往后选择,直到最后一个,然后循环
    • 最小连接:优先选择连接数最小的,即压力最小的后端服务器;在会话较长情况下可以考虑此方法。
    • 散列:根据请求源的ip的散列(hash)来选择要转发的服务器;这种方法可以在一定程度上保证特定用户能连接到相同的服务器。

    集成ribbon(以客户端的形式)

    ​ 1)导入依赖,之后还要从服务中心获取信息,所以Eureka的依赖也需要(客户端的Eureka)

    <!--Ribbon-->
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
      <!--Eureka-->
     <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
    <dependency>
         <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
      </dependency>
    

    ​ 2)编写配置

    server:
      port: 80
    
    
    #Eureka配置
    eureka:
      client:
        register-with-eureka: false    #不向eureka注册自己(我们是去拿信息)
        service-url:    #可以从这三个注册中心拿
          defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/
    

    ​ 3)让Eureka生效

    /**
     * Ribbon 和 Eureka 整合以后,客户端可以直接调用,不用关心IP地址和端口号
     */
    @SpringBootApplication
    @EnableEurekaClient  //Eureka客户端
    public class DeptConsumer_80 {
        public static void main(String[] args) {
            SpringApplication.run(DeptConsumer_80.class,args);
        }
    }
    

    4)配置负载均衡实现restTemplate

    @Configuration    //@Configuration 相当于spring里面的 applicationContext.xml
    public class ConfigBean {
        //配置负载均衡实现RestTemplate
        @Bean
        @LoadBalanced   //Ribbon
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }  
    

    ​ 通过Ribbon去实现负载均衡的时候,controller里的跳转地址应该是一个变量(即服务提供者的id),之后启动就可以了

    //Ribbon,我们这里的地址,应该是一个变量,通过服务名来访问
    //private static final String REST_URL_PERFIx="http://localhost:8001";
    private static final String REST_URL_PERFIx="http://SPRINGCLOUD-PRIVIDER-DEPT";
    

    以上是只用了一个数据库,我们也可使用多个数据试一下,有多个数据库的情况下,Ribbon会使用算法负载均衡,以便算出要访问那个数据库。如下图

  • 相关阅读:
    js replace替换 忽略大小写问题
    Spring security实现国际化问题
    Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题
    java设计模式学习
    synchronized的锁问题
    理解java的三种代理模式
    [acm]HDOJ 2059 龟兔赛跑
    [acm]HDOJ 2673 shǎ崽 OrOrOrOrz
    [acm]HDOJ 1200 To and Fro
    [acm]HDOJ 2064 汉诺塔III
  • 原文地址:https://www.cnblogs.com/mjjh/p/13392931.html
Copyright © 2011-2022 走看看