激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Cloud 負載均衡器 Ribbon原理及實現(xiàn)

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

2021-04-10 13:13林塬 Java教程

這篇文章主要介紹了Spring Cloud 負載均衡器 Ribbon原理及實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

ribbon簡介

分布式系統(tǒng)中,各個微服務會部署多個實例,如何將服務消費者均勻分攤到多個服務提供者實例上,就要使用到負載均衡器

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

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

為服務消費者整合ribbon

添加 ribbon 依賴庫

?
1
2
3
4
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-ribbobn</artifactid>
</dependency>

給 resttemplate 添加 @loadbalaced 注解,就可整合 resttemplate 和 ribbon

?
1
2
3
4
5
@bean
@loadbalanced
public resttemplate resttemplate(){
  return new resttemplate();
}

修改controller,請求地址修改為 http://flim-user/user/ ,當 ribbon 和 eureka 配合使用時,會自動將虛擬主機名映射成微服務的網絡地址,并注入了 loadbalancerclient 輸出當前選擇的微服務節(jié)點

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@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/ 查看微服務 flim-user 是否注冊成功
  5. 多次訪問 http://localhost:8010/user/1 會返回如下結果

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

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

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

可以看到請求會均勻的分布到兩個用戶微服務上

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 客戶端,本身已經包含“choose”行為

代碼方式配置 ribbon

可以使用java代碼或屬性自定義 ribbon 的配置,ribbon 默認配置類是 ribbonclientconfiguration,也可以使用一個 pojo 自定義 ribbon 配置,這種 配置是細粒度的,不同的 ribbon 客戶端可以使用不同的配置

創(chuàng)建 ribbon 配置類

?
1
2
3
4
5
6
7
8
9
10
11
12
/**
 * 該類為配置類
 * 不應該被componentscan掃描
 */
@configuration
public class ribbonconfiguration {
  @bean
  public irule ribbonrule(){
    //配置負載均衡的規(guī)則,更改為隨機
    return new randomrule();
  }
}

使用 @ribbonclient 或 @ribbonclients 注解為服務提供者指定配置類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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 可看見請求會隨機分布到兩微服務上

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配置

?
1
2
3
flim-user:
 ribbon:
  nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule

常用的 ribbon 全局配置

?
1
2
3
4
5
6
7
ribbon:
  connectiontimeout: #連接超時時間
  readtimeout: #讀取超時時間
  oktoretryonalloperatotions: #對所有操作請求都進行重試
  maxautoretriesnextserver: #切換服務器實例的重試次數(shù)
  maxautoretries:  #對當前實例的重試次數(shù)
  serverlistrefreshinterval:  #刷新服務列表源的間隔時間

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.jianshu.com/p/047ef2b7284f

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级黄色影片在线观看 | 欧美成人综合视频 | 成人永久在线 | 亚洲午夜在线视频 | 久久免费视频一区二区三区 | 国产视频在线观看一区二区三区 | 美国黄色毛片女人性生活片 | 欧美韩国日本在线 | 伊人亚洲精品 | 日本aⅴ在线| 日本成人一区二区 | 亚洲黑人在线观看 | 国产免费视频一区二区裸体 | 国产视频第一区 | 色妞妞视频 | 色妞色视频一区二区三区四区 | 成人黄色小视频网站 | 97久色| 欧美一级电影网站 | 亚洲一区二区三区精品在线观看 | 国产精品一品二区三区四区18 | 精品国产一区二区三区四区阿崩 | 日本大片在线播放 | 99精品视频免费看 | 黄色99视频| 成人444kkkk在线观看 | 九九精品在线播放 | 日本免费靠逼视频 | 亚洲国产一区二区三区 | 国产羞羞视频在线免费观看 | 日韩字幕在线观看 | 九九精品久久 | ,欧美特黄特色三级视频在线观看 | h色视频在线观看 | 手机国产乱子伦精品视频 | 欧美a一 | 精品成人国产在线观看男人呻吟 | 久久爽精品区穿丝袜 | 亚洲人成在线播放 | 毛片免费观看视频 | 免费a视频|