Ribbon實戰

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的實現類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章