Ribbon客户端

Ribbon

  • Ribbon 是 Netflix 提供的一个基于Http和Tcp的客户段负载均衡工具
  • 服务端负载均衡
  • 负载均衡算法在服务端
  • 由负载均衡器维护服务地址列表
  • 客户端负载均衡
  • 负载均衡算法在客户端
  • 客户端维护服务地址列表

Ribbon简化远程调用

  • Ribbon可以简化RestTemplate的远程调用
  • 实现步骤
  • 1.在声明Restemplate的@Bean的时候添加注解 @LoadBalanced
package com.itheima.consumer.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestemplateConfig {

     //加上这个注解
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
  • 2.在使用restTemplate发起请求时,需要定义url时,host:port可以替换为服务提供方的应用名称 例如:EUREKA-PROVIDER

Ribbon负载均衡

  • 随机:RandomRule
  • 轮询:RoundRobinRule
  • 最小并发:BestAvailableRule
  • 过滤:AvailabilityFilteringRule
  • 响应时间:WeightedResponseTimeRule
  • 轮询重试:RetryRule
  • 性能可用性:ZoneAvoidanceRule

Ribbon负载均衡配置(默认轮询策略)

1·编码方式设置Ribbon的负载均衡策略

  • 1.创建一个配置类MyRule
package com.itheima.consumer.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyRule {
    @Bean
    public IRule rule(){
        return new RandomRule();
    }

}
  • 2.在应用程序启动类中添加配置
package com.itheima.consumer;

import com.itheima.consumer.config.MyRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;

/**
 * 启动类
 */

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient //激活DiscoveryClient
/**
 * 配置Ribbon负载均衡策略
 * name:设置 服务提供方的 应用名称
 * configuration: 设置 负载均衡的Bean
 */
@RibbonClient(name = "EUREKA_PROVIDER", configuration = MyRule.class)
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class, args);
    }
}

2·配置方式设置Ribbon的负载均衡策略

  • 在yml中配置
#配置方式设置Ribbon的负载均衡策略
EUREKA_PROVIDER: #设置服务提供方 的应用名称
  ribbon:
    NFloadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule #策略类

你可能感兴趣的