Ribbon实战

1、Ribbon简介
Ribbon是Netflix发布的负载均衡器,配合Eureka使用时,可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例
Ribbon实战_第1张图片
2、使用Demo
1)引入Ribbon依赖


	org.springframework.cloud
	spring-cloud-starter-ribbon

注:1)与Eureka配合使用时,spring-cloud-starter-eureka中已经包含了spring-cloud-starter-ribbon
  2)添加@LoadBalanced注解

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 MovieConfiguration {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class MovieController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/user/{id}")
    public User findById(@PathVariable Long id) {
        return restTemplate.getForObject("http://user/" + id, User.class);
    }
}

3、使用Java代码自定义Ribbon配置

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 RibbonConfiguration {
    @Bean
    public IRule ribbonRule() {
        // 负载均衡规则,改为随机
        return new RandomRule();
    }
}
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;

@Configuration
@RibbonClient(name = "user", configuration = RibbonConfiguration.class)
public class TestRibbonConfiguration {
}

注:1)user为服务提供者在Eureka中的名称
  2)RibbonConfiguration该类不能在应用程序上下文的@ComponentScan中,否则会在全局生效(不同的服务我们可能会需要差异化的配置)
  3)可配置项有:IClientConfig、IRule、IPing、ServerList、ServerListFilter、ILoadBalancer
4、使用配置文件自定义Ribbon配置

# 指定user服务的负载均衡策略采用随机策略
user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRulew

application.yml中添加上述配置,其中user为服务名(做到了服务配置隔离),配置项有:
  1)NFLoadBalancerClassName:配置ILoadBalancer的实现类
  2)NFLoadBalancerRuleClassName:配置IRule的实现类
  3)NFLoadBalancerPingClassName:配置IPing的实现类
  4)NIWSServerListClassName:配置ServerList的实现类
  5)NIWSServerListFilterClassName:配置ServerListFilter的实现类

你可能感兴趣的:(Ribbon实战)