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会使用算法负载均衡,以便算出要访问那个数据库。如下图

posted @ 2020-07-28 18:20  林森001  阅读(108)  评论(0编辑  收藏  举报