1、Ribbon簡介
Ribbon是Netflix發佈的負載均衡器,配合Eureka使用時,可自動從Eureka Server獲取服務提供者地址列表,並基於負載均衡算法,請求其中一個服務提供者實例
2、使用Demo
1)引入Ribbon依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
注: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的實現類