最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Ribbon簡介

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

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

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

添加 Ribbon 依賴庫

<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,請求地址修改為 http://flim-user/user/ ,當(dāng) Ribbon 和 Eureka 配合使用時,會自動將虛擬主機名映射成微服務(wù)的網(wǎng)絡(luò)地址,并注入了 LoadBalancerClient 輸出當(dāng)前選擇的微服務(wù)節(jié)點

@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());
  }
}

運行測試程序

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

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

多次訪問 http://localhost:8010/log-instance 控制臺會輸出以下信息

可以看到請求會均勻的分布到兩個用戶微服務(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(...) 寫在同一方法中,因為 rest-Template 實際上就是一個 Ribbon 客戶端,本身已經(jīng)包含“choose”行為

代碼方式配置 Ribbon

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

創(chuàng)建 Ribbon 配置類

/**
 * 該類為配置類
 * 不應(yīng)該被ComponentScan掃描
 */
@Configuration
public class RibbonConfiguration {
  @Bean
  public IRule ribbonRule(){
    //配置負(fù)載均衡的規(guī)則,更改為隨機
    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);
  }
}

訪問測試地址 http://localhost:8010/log-instance 可看見請求會隨機分布到兩微服務(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 掃描到,否則配置信息就會被所有 @RibbonClient 共享,因此如果只想自定義某個 Ribbon 客戶端的配置,必須防止被 @ComponentScan 掃描

配置文件方式配置 Ribbon

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

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

通過配置文件定義Ribbon配置

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

常用的 Ribbon 全局配置

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

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

相關(guān)文章

  • 防止未登錄用戶操作—基于struts2攔截器的簡單實現(xiàn)

    防止未登錄用戶操作—基于struts2攔截器的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄乐刮吹卿浻脩舨僮鳌趕truts2攔截器的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring Boot定時器創(chuàng)建及使用解析

    Spring Boot定時器創(chuàng)建及使用解析

    這篇文章主要介紹了Spring Boot定時器創(chuàng)建及使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • json解析時遇到英文雙引號報錯的解決方法

    json解析時遇到英文雙引號報錯的解決方法

    下面小編就為大家分享一篇json解析時遇到英文雙引號報錯的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 解決RestTemplate 請求接收自定義400+ 或500+錯誤

    解決RestTemplate 請求接收自定義400+ 或500+錯誤

    這篇文章主要介紹了解決RestTemplate 請求接收自定義400+ 或500+錯誤,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 在spring中使用自定義注解注冊監(jiān)聽器的方法

    在spring中使用自定義注解注冊監(jiān)聽器的方法

    本篇文章主要介紹了在spring中使用自定義注解注冊監(jiān)聽器的方法,本文就是在分析監(jiān)聽器回調(diào)原理的基礎(chǔ)上,在spring環(huán)境中使用自定義的注解實現(xiàn)一個監(jiān)聽器。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java實現(xiàn)微信發(fā)紅包

    Java實現(xiàn)微信發(fā)紅包

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)微信發(fā)紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 教你使用Java實現(xiàn)掃雷小游戲(最新完整版)

    教你使用Java實現(xiàn)掃雷小游戲(最新完整版)

    本文給大家介紹使用Java實現(xiàn)掃雷小游戲,本程序封裝了五個類,分別是主類GameWin類,繪制底層地圖和繪制頂層地圖的類MapBottom類和MapTop類,繪制底層數(shù)字的類BottomNum類,以及初始化地雷的BottomRay類和工具GameUtil類,用于存靜態(tài)參數(shù)和方法,感興趣的朋友一起看看吧
    2022-05-05
  • @Transactional注解異常報錯之多數(shù)據(jù)源詳解

    @Transactional注解異常報錯之多數(shù)據(jù)源詳解

    這篇文章主要介紹了@Transactional注解異常報錯之多數(shù)據(jù)源詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 一文帶你你搞懂Java的3種IO模型

    一文帶你你搞懂Java的3種IO模型

    在Java中,一共有三種IO模型,分別是阻塞IO(BIO)、非阻塞IO(NIO)和異步IO(AIO),本文將給大家詳解的介紹這三種IO模型,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-05-05
  • IDEA Maven下載依賴包速度過慢的問題及解決方案

    IDEA Maven下載依賴包速度過慢的問題及解決方案

    這篇文章主要介紹了IDEA Maven下載依賴包速度過慢的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

崇仁县| 东源县| 清新县| 泰宁县| 松桃| 汕头市| 司法| 溧水县| 卢龙县| 古交市| 牡丹江市| 濮阳市| 连山| 乐平市| 闽侯县| 商城县| 铜山县| 廊坊市| 子洲县| 广水市| 东乡族自治县| 固始县| 长岭县| 岫岩| 文山县| 武隆县| 临海市| 喀喇| 榆林市| 济源市| 神池县| 聂拉木县| 株洲县| 平顺县| 惠州市| 启东市| 碌曲县| 新昌县| 花莲市| 南郑县| 泰顺县|