天天看点

【SpringCloud】Ribbon:负载均衡什么是Ribbon?参数配置

什么是Ribbon?

【SpringCloud】Ribbon:负载均衡什么是Ribbon?参数配置

并且Eureka中已经集成了Ribbon,所以我们无需引入新的依赖

【SpringCloud】Ribbon:负载均衡什么是Ribbon?参数配置

如果要引入也是可以以的,依赖如下

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
           

LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA常见的负载均衡有软件Nginx, LVS,硬件F5等。目应的在中间件,例如: dubbo和SpringCloud中均给我们提供了负载均衡, SpringCloud的负载均衡算法可以自定义。

参数配置

ribbon是集成于消费方的,在引入cloud的依赖后,在消费方的调用方法上使用注解即可生效。

pom依赖如下:

<!-- Ribbon相关 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- spring-cloud-starter-eureka包含ribbon依赖,可以不用配置 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
           

yml配置

#调用方配置eureka,做负载均衡
eureka:
  client:
    register-with-eureka: false #作为消费方,可以注册,也可以不注册。
    service-url:
      defaultZone: http://localhost:10086/eureka/
    fetch-registry: true  #true拉取注册的服务,false不拉取服务
    registry-fetch-interval-seconds: 5 #表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒
           

负载均衡注解启动,他是在启动类的主方法上加的注解

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@EnableCircuitBreaker  //开启熔断
@SpringCloudApplication //组合注解,相当于以上三个(SpringBootApplication,EnableEurekaClient,EnableCircuitBreaker  )的集合
public class ItcastServiceConsumerApplication {
    @Bean
    @LoadBalanced  //开启负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }


    public static void main(String[] args) {
        SpringApplication.run(ItcastServiceConsumerApplication.class, args);
    }

}
           

负载均衡策略

(1)默认是简单的轮询

顾名思义,就是将每一个同名的服务挨个访问一遍,以此往复。yml不配置,就默认是轮询

(2)随机

有多个同名服务,不确定访问哪一个服务,随机访问。

yml配置如下:

service-provider: #服务提供方的id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  #随机负载均衡策略配置,也可以是自定义的策略
           

更多策略

【SpringCloud】Ribbon:负载均衡什么是Ribbon?参数配置

有关ribbon的图 

【SpringCloud】Ribbon:负载均衡什么是Ribbon?参数配置