欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Cloud 負(fù)載均衡器 Ribbon原理及實(shí)現(xiàn)

 更新時(shí)間:2018年03月09日 08:34:50   作者:林塬  
這篇文章主要介紹了Spring Cloud 負(fù)載均衡器 Ribbon原理及實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Ribbon簡(jiǎn)介

分布式系統(tǒng)中,各個(gè)微服務(wù)會(huì)部署多個(gè)實(shí)例,如何將服務(wù)消費(fèi)者均勻分?jǐn)偟蕉鄠€(gè)服務(wù)提供者實(shí)例上,就要使用到負(fù)載均衡器

Ribbon 是負(fù)載均衡器 ,它提供了很多負(fù)載均衡算法,例如輪詢、隨即等,在配置服務(wù)提供者地址后,可以將服務(wù)消費(fèi)者請(qǐng)求均勻的分發(fā)

為服務(wù)消費(fèi)者整合Ribbon

添加 Ribbon 依賴庫(kù)

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-ribbobn</artifactId>
</dependency>

給 RestTemplate 添加 @LoadBalaced 注解,就可整合 RestTemplate 和 Ribbon

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
  return new RestTemplate();
}

修改Controller,請(qǐng)求地址修改為 http://flim-user/user/ ,當(dāng) Ribbon 和 Eureka 配合使用時(shí),會(huì)自動(dòng)將虛擬主機(jī)名映射成微服務(wù)的網(wǎng)絡(luò)地址,并注入了 LoadBalancerClient 輸出當(dāng)前選擇的微服務(wù)節(jié)點(diǎn)

@RestController
public class MovieController {

  private final Logger log = LoggerFactory.getLogger(MovieController.class);

  @Autowired
  private RestTemplate restTemplate;

  @Autowired
  private LoadBalancerClient loadBalancerClient;

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

  @GetMapping("/log-instance")
  public void logInstance(){
    ServiceInstance serviceInstance = this.loadBalancerClient.choose("flim-user");
    log.info("{}:{}:{}",serviceInstance.getServiceId(),serviceInstance.getHost(),serviceInstance.getPort());
  }
}

運(yùn)行測(cè)試程序

  1. 啟動(dòng) Eureka Server
  2. 啟動(dòng) 2 個(gè)或更多 flim-user 實(shí)例
  3. 啟動(dòng) flim-consumer
  4. 訪問 http://localhost:8761/ 查看微服務(wù) flim-user 是否注冊(cè)成功
  5. 多次訪問 http://localhost:8010/user/1 會(huì)返回如下結(jié)果

{"id":1,"username":"account1","name":"張三","age":20,"balance":100.00}

多次訪問 http://localhost:8010/log-instance 控制臺(tái)會(huì)輸出以下信息

可以看到請(qǐng)求會(huì)均勻的分布到兩個(gè)用戶微服務(wù)上

2017-12-17 20:47:53.975  INFO 12313 --- [nio-8010-exec-2] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
2017-12-17 20:47:54.215  INFO 12313 --- [nio-8010-exec-1] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 20:47:54.445  INFO 12313 --- [nio-8010-exec-3] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
2017-12-17 20:47:54.690  INFO 12313 --- [nio-8010-exec-4] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 20:47:54.935  INFO 12313 --- [nio-8010-exec-5] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764

注意 :不能將 restTemplate.getForObject(...) 與 loadBalancerClient.choose(...) 寫在同一方法中,因?yàn)?rest-Template 實(shí)際上就是一個(gè) Ribbon 客戶端,本身已經(jīng)包含“choose”行為

代碼方式配置 Ribbon

可以使用Java代碼或?qū)傩宰远x Ribbon 的配置,Ribbon 默認(rèn)配置類是 RibbonClientConfiguration,也可以使用一個(gè) POJO 自定義 Ribbon 配置,這種 配置是細(xì)粒度的,不同的 Ribbon 客戶端可以使用不同的配置

創(chuàng)建 Ribbon 配置類

/**
 * 該類為配置類
 * 不應(yīng)該被ComponentScan掃描
 */
@Configuration
public class RibbonConfiguration {
  @Bean
  public IRule ribbonRule(){
    //配置負(fù)載均衡的規(guī)則,更改為隨機(jī)
    return new RandomRule();
  }
}

使用 @RibbonClient 或 @RibbonClients 注解為服務(wù)提供者指定配置類

@SpringBootApplication
@EnableDiscoveryClient
@RibbonClient(name = "flim-user",configuration = RibbonConfiguration.class)
public class FlimConsumerApplication {
  @Bean
  @LoadBalanced
  public RestTemplate restTemplate(){
    return new RestTemplate();
  }
  public static void main(String[] args) {
    SpringApplication.run(FlimConsumerApplication.class, args);
  }
}

訪問測(cè)試地址 http://localhost:8010/log-instance 可看見請(qǐng)求會(huì)隨機(jī)分布到兩微服務(wù)上

2017-12-17 21:08:52.769  INFO 12524 --- [nio-8010-exec-7] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 21:08:52.946  INFO 12524 --- [nio-8010-exec-8] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 21:08:53.138  INFO 12524 --- [nio-8010-exec-9] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 21:08:53.319  INFO 12524 --- [io-8010-exec-10] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
2017-12-17 21:08:53.511  INFO 12524 --- [nio-8010-exec-1] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763

注意 :RibbonConfiguration 類不能被 @ComponentScan 掃描到,否則配置信息就會(huì)被所有 @RibbonClient 共享,因此如果只想自定義某個(gè) Ribbon 客戶端的配置,必須防止被 @ComponentScan 掃描

配置文件方式配置 Ribbon

通過(guò)配置文件方式自定義 Ribbon 屬性更加方便,配置的前綴是 <clientName>.ribbon.

  1. NFLoadBalancerClassName:配置 ILoadBalancer 的實(shí)現(xiàn)類
  2. NFLoadBalancerRuleClassName:配置 IRule 的實(shí)現(xiàn)類
  3. NFLoadBalancerPingClassName:配置 IPing 實(shí)現(xiàn)類
  4. NIWSServerListClassName:配置 ServerList 的實(shí)現(xiàn)類
  5. NIWSServerListFilterClassName:配置 ServerListFilter 的實(shí)現(xiàn)類

通過(guò)配置文件定義Ribbon配置

flim-user:
 ribbon:
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

常用的 Ribbon 全局配置

ribbon:
  ConnectionTimeout: #連接超時(shí)時(shí)間
  ReadTimeout: #讀取超時(shí)時(shí)間
  OkToRetryOnAllOperatotions: #對(duì)所有操作請(qǐng)求都進(jìn)行重試
  MaxAutoRetriesNextServer: #切換服務(wù)器實(shí)例的重試次數(shù)
  MaxAutoRetries:  #對(duì)當(dāng)前實(shí)例的重試次數(shù)
  ServerListRefreshInterval:  #刷新服務(wù)列表源的間隔時(shí)間

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析Mysql中的視圖

    淺析Mysql中的視圖

    這篇文章主要介紹了淺析Mysql中的視圖,視圖是從一個(gè)或者多個(gè)表中導(dǎo)出的表,視圖的行為與表非常相似,在視圖中用戶可以使用SELECT語(yǔ)句查詢數(shù)據(jù),以及使用INSERT、UPDATE和DELETE修改記錄,需要的朋友可以參考下
    2023-05-05
  • java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備

    java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備

    這篇文章主要介紹了java中的JsonSerializer用法,前后端單位轉(zhuǎn)換必備!具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java實(shí)現(xiàn)帶有背景圖片的窗體

    java實(shí)現(xiàn)帶有背景圖片的窗體

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)帶有背景圖片的窗體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • SpringBoot容器的主要組件詳解

    SpringBoot容器的主要組件詳解

    這篇文章主要介紹了SpringBoot容器的主要組件詳解,SpringBoot?是基于?Spring?Framework?的一種快速開發(fā)框架,它可以幫助開發(fā)者快速地構(gòu)建獨(dú)立的、生產(chǎn)級(jí)別的、可部署的應(yīng)用程序,需要的朋友可以參考下
    2023-09-09
  • Spring?Cloud?Ribbon?中的?7?種負(fù)載均衡策略的實(shí)現(xiàn)方法

    Spring?Cloud?Ribbon?中的?7?種負(fù)載均衡策略的實(shí)現(xiàn)方法

    Ribbon?內(nèi)置了?7?種負(fù)載均衡策略:輪詢策略、權(quán)重策略、隨機(jī)策略、最小連接數(shù)策略、重試策略、可用性敏感策略、區(qū)域性敏感策略,并且用戶可以通過(guò)繼承?RoundRibbonRule?來(lái)實(shí)現(xiàn)自定義負(fù)載均衡策略,對(duì)Spring?Cloud?Ribbon負(fù)載均衡策略相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • JAVA利用泛型返回類型不同的對(duì)象方法

    JAVA利用泛型返回類型不同的對(duì)象方法

    下面小編就為大家?guī)?lái)一篇JAVA利用泛型返回類型不同的對(duì)象方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Java線程并發(fā)中常見的鎖機(jī)制詳細(xì)介紹

    Java線程并發(fā)中常見的鎖機(jī)制詳細(xì)介紹

    越來(lái)越多的互聯(lián)網(wǎng)企業(yè)面臨著用戶量膨脹而帶來(lái)的并發(fā)安全問題。接下來(lái)通過(guò)本文給大家介紹Java線程并發(fā)中常見的鎖機(jī)制,感興趣的朋友一起看看吧
    2016-05-05
  • SpringBoot如何打印mybatis的執(zhí)行sql問題

    SpringBoot如何打印mybatis的執(zhí)行sql問題

    這篇文章主要介紹了SpringBoot如何打印mybatis的執(zhí)行sql問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java tostring方法重寫代碼示例

    java tostring方法重寫代碼示例

    這篇文章主要介紹了java tostring方法重寫代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的全過(guò)程

    Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的全過(guò)程

    JDBC的全稱是Java?Database?Connectivity,即Java數(shù)據(jù)庫(kù)連接,它是一種可以執(zhí)行SQL語(yǔ)句的Java?API,下面這篇文章主要給大家介紹了關(guān)于Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評(píng)論