基於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的URLConnection
比Apache HttpClient
快很多倍。但是Apache HttpClient
和okhttp
都支持配置連接池功能。具體選擇需要權衡
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/