Ribbon進行服務調用/負載均衡以及請求重試配置


Ribbon負載均衡

經過對Eureka的認識,及Eureka集群的搭建,已經基本可以入門Eureka的使用。之前對於服務調用者我們是直接獲取注冊列表后通過 get(0) 的方式來獲取第一個注冊信息。而當我們服務提供者也搭建了集群之后。這種方式是不可取的。那么如何選擇一個合適的提供者來提供服務呢?

首先排除我們自己通過硬編碼的方式選。

之前接觸過Zookeeper的朋友應該對負載均衡這個詞不陌生,而Ribbon是另外的一種負載均衡程序,和Eureka同為NetFlix公司開發,且在Eureka客戶端中集成了Ribbon。一般搭配使用。

Ribbon的主要作用

服務調用

基礎Ribbon實現的服務調用,是通過拉取到所有的服務列表組成(服務名+請求路徑)映射關系,借助RestTemplate實現調用。

注意:

在使用 Ribbon 進行服務調用的時候,應用的名稱只能使用 - 中划線連接,不能使用下划線。否則服務將無法識別。

  1. 在注入RestTemplate的同時加上 @LoadBalanced 注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}
  1. 服務調用的時候,不用再去手動的從列表中獲取服務的請求url,直接使用服務名稱替代之
@GetMapping("teacher/users")
public List getAllUser(){
return restTemplate.getForObject("http://SERVICE-PROVIDER/api/v1/users", List.class);
}

負載均衡

根據其內置的負載均衡算法,在有多個服務提供方時,選擇合適的一個。Ribbon提供的負載均衡算法有:

img

可通過配置直接修改:

# 可以通過 服務名:ribbon:NFLoadBalancerRuleClassName: 對應的策略全類名
SERVICE-PROVIDER:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

重試機制

除了服務調用和負載均衡,Ribbon家族還提供了允許接口調用時重試。使用方法如下:

  1. 導入重試坐標
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
  1. 在配置文件中配置相應的參數
spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true # 重試功能的開關 默認 true
SERVICE-PROVIDER:
  ribbon:
    ConnectTimeout: 250 # 與服務提供方建立Http連接的超時時間
    ReadTimeout: 1000 # 接收返回數據的超時時間
    OkToRetryOnAllOperations: true # 是否對所有操作都進行重試
    MaxAutoRetriesNextServer: 1 # 切換實例的重試次數
    MaxAutoRetries: 1 # 對當前實例的重試次數(包含第一次請求,即配置1相當於請求超時就切換)

如果按照上面的配置,當消費方向提供方嘗試建立連接后250ms未能成功,就會直接切換至下一個服務方嘗試連接(autoRetries = MaxAutoRetries = 1)。此時如果還失敗(autoRetriesNextServer = MaxAutoRetriesNextServer = 1),則請求失敗。可以根據業務需求進行實際的配置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM