亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Cloud 系列之負載均衡 Ribbon的示例代碼

 更新時間:2020年11月06日 09:44:35   作者:Demo_Null  
Ribbon 是 Netflix 發(fā)布的負載均衡器,它有助于控制 HTTP 和 TCP 客戶端的行為。這篇文章主要介紹了Spring Cloud 系列之負載均衡 Ribbon的示例代碼,需要的朋友可以參考下

1.1 簡介

1.1.1 概述

  Ribbon 是 Netflix 發(fā)布的負載均衡器,它有助于控制 HTTP 和 TCP 客戶端的行為。為 Ribbon 配置服務提供者地址列表后,Ribbon 就可基于某種負載均衡算法,自動地幫助服務消費者去請求。Ribbon 默認為我們提供了很多的負載均衡算法,例如輪詢、隨機等。當然,我們也可為 Ribbon 實現(xiàn)自定義的負載均衡算法。Ribbon 現(xiàn)在已經(jīng)進入維護狀態(tài),但目前仍在大規(guī)模使用,Spring Cloud 準備使用 LoadBalancer 作為 Ribbon 的替換方案。

1.1.2 相關依賴

  因為現(xiàn)在的注冊中心幫我們引入了 Ribbon 我們不需要再次引入就可以直接使用,當然也可以再引入一次沒有影響。

在這里插入圖片描述

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

1.2 簡單使用

1.2.1 搭建項目

eureka 項目

1.2.2 開啟負載均衡

  開啟負載均衡非常簡單,只需要在 RestTemplate 的配置方法上加上 @LoadBalanced 注解即可使用最簡單的輪詢。

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/29
 * @description 消費者啟動類
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
 public static void main(String[] args) {
  SpringApplication.run(ConsumerApplication.class, args);
 }
 
 @Bean
 @LoadBalanced
 public RestTemplate getRestTemplate() {
  return new RestTemplate();
 }
}

1.2.3 使用負載均衡

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/29
 * @description
 */
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

 @Autowired
 private DiscoveryClient discoveryClient;

 @Autowired
 private RestTemplate restTemplate;

 @GetMapping("/go")
 public void go() {
  List<ServiceInstance> providerServer = discoveryClient.getInstances("ProviderServer");

  if (0 == providerServer.size()) {
   return;
  }

  ServiceInstance serviceInstance = providerServer.get(0);
  String url = serviceInstance.getUri() + "/provider/get";
  System.out.println(url + " --- ");
  String str = restTemplate.getForObject(url, String.class);
  System.out.println(str);

 }
}

  喔嚯!報錯了,明明可以訪問到為什么會報找不到實例呢?這是應為咱們使用 DiscoveryClient 直接獲取到了服務提供者集群中某一個的地址,然后讓 RestTemplate 去進行負載均衡。我們都已經(jīng)拿到了準確地址再怎么進行負載均衡?所以我們這里不能使用 IP 要使用服務名稱。

在這里插入圖片描述
在這里插入圖片描述

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

 @Autowired
 private RestTemplate restTemplate;


 @GetMapping("/go")
 public void go() {
  String url = "http://ProviderServer/provider/get";

  String str = restTemplate.getForObject(url, String.class);
  System.out.println(str);
 }
}

修改完畢之后就可以看到服務提供者是輪換進行提供服務的

在這里插入圖片描述

1.3 替換負載均衡策略

1.3.1 自帶負載均衡策略

在這里插入圖片描述

策略名 策略描述
RoundRobinRule 輪詢選擇 server
RandomRule 隨機選擇一個 serve
RetryRule 先按輪詢策略獲取服務,如果獲取服務失敗則在指定時間內(nèi)重試,獲取可用服務
BestAvailableRule 會先過濾由于多次訪問故障而處于斷路器跳閘狀態(tài)的服務,然后選擇一個并發(fā)量最小的服務
AvailabilityFilteringRule 會優(yōu)先過濾故障實例,再選擇并發(fā)較小的實例
WeightedResponseTimeRule 對輪詢的擴展,響應速度越快的實例選擇比重權越大,越容易被選擇
ZoneAvoidanceRule 復合判斷 server 所在區(qū)域的性能和 server 的可用性選擇 server

1.3.2 使用配置類

  官方文檔明確警告,這個自定義配置類不能放在 @ComponedtScan 所掃描的當前包下以及子包下,否則我們自定義的這個配置類就會被所有的 Ribbon 客戶端所共享。即在 Spring Boot 主程序掃描的包外定義配置類或在與 Spring Boot 主程序的同一級目錄但在排除掃描。配置類創(chuàng)建完畢后為 Spring Boo 主程序添加 @RibbonClient 注解引入配置類,用 name 屬性來指定調(diào)用的服務名稱,configuration 屬性指定自定義配置類

@Configuration
public class MyRibbonRule {

 @Bean
 public IRule ribbonRule() {
  return new RandomRule();
 }
}
@SpringBootApplication
@EnableDiscoveryClient
// 用 name 來指定調(diào)用的服務名稱,configuration 指定自定義配置類
@RibbonClient(name = "ProviderServer", configuration = MyRibbonRule.class)
public class ConsumerApplication {

 public static void main(String[] args) {
  SpringApplication.run(ConsumerApplication.class, args);
 }

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

在這里插入圖片描述

1.3.3 配置文件

# 這種配置的優(yōu)先級低于配置類
# 想要調(diào)用的服務名稱,即服務提供者名稱
ProviderServer:
 ribbon:
 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

在這里插入圖片描述

源碼

到此這篇關于Spring Cloud 系列之負載均衡 Ribbon的示例代碼的文章就介紹到這了,更多相關Spring Cloud 負載均衡 Ribbon內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java CRM系統(tǒng)用戶登錄功能實現(xiàn)代碼實例

    Java CRM系統(tǒng)用戶登錄功能實現(xiàn)代碼實例

    這篇文章主要介紹了Java CRM系統(tǒng)用戶登錄功能實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java并發(fā)編程之原子變量與非阻塞同步機制

    Java并發(fā)編程之原子變量與非阻塞同步機制

    這篇文章主要介紹了Java并發(fā)編程之原子變量與非阻塞同步機制,本文講解了非阻塞算法、悲觀技術、樂觀技術、CAS操作、原子變量、性能比較:鎖與原子變量等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Java項目工程代碼深度刨析總結

    Java項目工程代碼深度刨析總結

    一個項目工程里的代碼是怎樣的呢?對于初學者或者沒有參與過項目的零經(jīng)驗同學這都是未知且讓人好奇的,本篇文章帶你一探究竟,踏入真實項目的大門
    2022-08-08
  • Hadoop源碼分析五hdfs架構原理剖析

    Hadoop源碼分析五hdfs架構原理剖析

    本篇是Hadoop源碼分析系列文章第五篇,主要介紹Hadoop的hdfs架構原理剖析,后續(xù)本系列文章會持續(xù)更新,有需要的朋友可以借鑒參考下
    2021-09-09
  • 簡單談談Java中的棧和堆

    簡單談談Java中的棧和堆

    堆和棧都是Java用來在RAM中存放數(shù)據(jù)的地方,下面這篇文章主要給大家介紹了關于Java中棧和堆的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • Java編程實現(xiàn)比對兩個文本文件并標記相同與不同之處的方法

    Java編程實現(xiàn)比對兩個文本文件并標記相同與不同之處的方法

    這篇文章主要介紹了Java編程實現(xiàn)比對兩個文本文件并標記相同與不同之處的方法,涉及java針對文本文件的讀取、遍歷、判斷等相關操作技巧,需要的朋友可以參考下
    2017-10-10
  • 在webservice里調(diào)用耗時方法出錯的解決方案

    在webservice里調(diào)用耗時方法出錯的解決方案

    這篇文章主要介紹了在webservice里調(diào)用耗時方法出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解析Java和IDEA中的文件打包問題

    解析Java和IDEA中的文件打包問題

    這篇文章主要介紹了Java和IDEA中的文件打包問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • SpringBoot安全策略開發(fā)之集成數(shù)據(jù)傳輸加密

    SpringBoot安全策略開發(fā)之集成數(shù)據(jù)傳輸加密

    這篇文章主要介紹了SpringBoot集成數(shù)據(jù)傳輸加密,近期在對開發(fā)框架安全策略方面進行升級優(yōu)化,提供一些通用場景的解決方案,本文針對前后端數(shù)據(jù)傳輸加密進行簡單的分享
    2023-01-01
  • SpringBoot @Autowired注入為空的情況解讀

    SpringBoot @Autowired注入為空的情況解讀

    這篇文章主要介紹了SpringBoot @Autowired注入為空的情況解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論