springCloud feign使用/優化總結


基於springCloud Dalston.SR3版本

 

1.當接口參數是多個的時候 需要指定@RequestParam 中的value來明確一下。

/**
 * 用戶互掃
 * @param uid 被掃人ID
 * @param userId 當前用戶ID
 * @return
 */
@PostMapping(REQ_URL_PRE + "/qrCodeReturnUser")
UserQrCode qrCodeReturnUser(@RequestParam("uid") String uid,@RequestParam("userId") Integer userId);

2.接口參數為對象的時候 需要使用@RequestBody注解 並采用POST方式。

3.如果接口是簡單的數組/列表參數 這里需要使用Get請求才行

@GetMapping(REQ_URL_PRE + "/getUserLevels")
Map<Integer, UserLevel> getUserLevels(@RequestParam("userIds") List<Integer> userIds);

4.直接可以在@FeignClient中配置降級處理方式 對於一些不重要的業務 自定義處理很有幫助

@FeignClient(value = "cloud-user", fallback = IUsers.UsersFallback.class)

5.feign默認只有HystrixBadRequestException異常不會走熔斷,其它任何異常都會進入熔斷,需要重新實現一下ErrorDecoder包裝業務異常

示例:https://github.com/peachyy/feign-support

6. feign HTTP請求方式選擇

feign默認使用的是基於JDK提供的URLConnection調用HTTP接口,不具備連接池。所以資源開銷上有點影響,經測試JDK的URLConnectionApache HttpClient快很多倍。但是Apache HttpClientokhttp都支持配置連接池功能。具體選擇需要權衡

7.默認不啟用hystrix 需要手動指定feign.hystrix.enabled=true 開啟熔斷

8.啟用壓縮也是一種有效的優化方式

feign.compression.request.enabled=true
feign.compression.response.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json

  

9.參數相關調優

  hystrix線程數設置

 設置參數hystrix.threadpool.default.coreSize 來指定熔斷隔離的線程數 這個數需要調優,經測試 線程數我們設置為和提供方的容器線程差不多,吞吐量高許多。

  第一次訪問服務出錯的問題

    啟用Hystrix后,很多服務當第一次訪問的時候都會失敗 是因為初始化負載均衡一系列操作已經超出了超時時間了 默認的超時時間為1S,設置參數超時時間hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=30000 可解決這個問題。

  負載均衡參數設置

  設置了Hystrix的超時參數會 還需設置一下ribbon的相關參數 這些參數和Hystrix的超時參數有一定的邏輯關系
       請求處理的超時時間 ribbon.ReadTimeout=120000
      請求連接的超時時間 ribbon.ConnectTimeout=30000

 

 

原文:http://blog.seoui.com/2018/09/30/springcloud-feign/

  


免責聲明!

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



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