什么是Ribbon?
并且Eureka中已经集成了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 #随机负载均衡策略配置,也可以是自定义的策略
更多策略
有关ribbon的图