微服務之間相互調用問題


RestTemplate :是一個訪問Restful風格的第三方服務的 網絡請求框架

使用 :  1.使用配置類配置一個RestTemplate的bean

    2.在要使用的服務中自動注入

 

Nacos:一個微服務的服務注冊中心(nacos關閉后服務的鏈接不會失效)

 

Ribbon:一個springcloud組件,用來實現服務調用的負載均衡

 

 

 

 使用:在restTemplate 的bean上加上@LoadTemplate注解就能使用默認的均衡算法 來均衡

 

ribbon還提供了重試機制

幾個參數:建立連接的超時時間(connectTimeout),處理請求的超時時間,同一實例的最大重試次數,所有其他實例(不包括第一次鏈接)的最大重試次數

 

OpenFeign: 一個偽http客戶端,集成了 ribbon和resttemplate 

 

 

feign 中ribbon的關鍵屬性

  OkToRetryOnAllOperations 

    :true  //所有請求都會重試 (不安全,可能會想數據庫插入兩個相同記錄)

    :false //只有get類型,也就是查詢才會出發重試機制(推薦)

  

  feign參數傳遞:

    get:服務調用方接口中的feign方法    傳遞對象的參數   前面要加@SpringQueryMap注解

    post:服務提供方 的controller中參數要加  @RequestBody

 

服務雪崩:下游的服務不可用導致上游的不可用

  

解決方案:隔離 超時 限流 熔斷 降級 

 

sentinel  : 一套服務容錯的綜合性解決方案

  sentinel配置限流  qps ,該controller  1秒鍾內可以被訪問的次數

  sentinel配置熔斷降級(以后請求不再執行) RT 和時間窗口  該controller執行平均時間不能超過  如(RT) 100ms  ,否則在 30s(時間窗口)內不再處理請求,

  而是拋出異常,30s后恢復

 

限流,降級等會導致被保護的controller拋出FlowException ,DegradeException等異常

  這類異常無法被普通的異常切面捕獲到,需要一個實現UrlBlockHandler的類來處理該類型異常

 

 

  


免責聲明!

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



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