首先這個專案起始是參考前人做的乙個專案拷貝過來修改的,所以在對於介面的書寫方式幾乎是無異的,除了他們專案引用了更多的jar包以外;然後就按部就班地使用了feignclient開始了服務呼叫,可是並沒有像他們專案過得那麼順利,總是在client介面呼叫處遇到了傳參的問題。
①前人不需要指定請求方式,可是我這邊必須要給他指定一下方式,不然預設是get方式;
②對於這個requestparam註解導致的400、415等問題一直是沒有發現的;剛開始在考慮是否是包名類名需要完全一致等原因,排除這個的可能後;先用簡單引數傳輸,依然不行。
③在參考了網上部落格的「深入理解feignclient」之後,
加入了
com.netflix.feign
的依賴,經測試解決了傳輸問題,但是只能支援字串傳輸,對於物件依然會報400的問題。
④取消掉對於第③步引用的jar解決的部分問題;新建乙個簡單工程測試排除原工程可能出現的spring載入順序引起的異常情況;簡單jar引用,比較坑的是對於client介面和controller層都是拷貝原工程的**;這個時候出現了新的問題,因為在進行這個新簡單工程的package時出現了乙個不重要的報錯(說的是簡單工程與原工程的名稱相同),專案可以正常啟動,但只能用jar啟動。
⑤然後和原來一樣進行post,這時出現了controller層面的400引數問題,
(missingservletrequestparameterexception",
"message":"required waterbilldtonopassword parameter 'waterbillvo' is not present)
然後就想放棄這個簡單工程回到原工程進行post,發現原工程這時也出現了同樣的錯誤,但是在建簡單工程之前原工程的controller層可以,client層報的400。
⑥這個時候請同事幫忙看,在一番檢閱下,我建議先去掉valid註解嘗試,結果不行,好在controller層面處理比client層的呼叫的可見度要來的高,可是即使是在dispatcherservlet的斷點檢視並沒發現問題,所以只能懷疑註解的問題了;我發現requestparam這個註解除了對於傳參取別名和部分校驗外沒什麼用處,就去掉了這個註解,結果就成了;發現與controller類似的client層也應該是這個註解產生的問題,經驗證確實是;比較奇怪的是前人做的那個專案竟然沒有報這些錯誤。
總結:
經過查閱、思考和檢驗,這個問題受多餘註解的干擾,需要明確requestbody和requestparam的用法,requestbody註解用於傳輸物件、集合;而requestparam註解用於傳輸單條引數並起別名和是否必須。
⑦超時問題:從報錯中判斷超時型別是ribbon還是hystrix
# ribbon
# 請求處理的超時時間
ribbon.readtimeout: 120000
# 請求連線的超時時間
ribbon.connecttimeout: 30000
# hystrix
feign.hystrix.enabled: true
# hystrix 熔斷機制
hystrix:
sharesecuritycontext: true
command:
default:
circuitbreaker:
sleepwindowinmilliseconds: 100000
forceclosed: true
execution:
isolation:
thread:
timeoutinmilliseconds: 600000
==
關於FeignClient註解的使用,部署訪問
近來關於feignclient的使用,按理說應該現在已經是很成熟了,但目前仍然會有人有一些疑惑,就想從自己的角度去把這個如何使用做個介紹 從四個角度,了解feginclient是什麼,主要用於做什麼的,如何使用這個,如何部署訪問到 首先關於feginclient註解,主要是用於服務間進行呼叫,作用在...
FeignClient註解屬性
feignclient value run product fallback productclientservicefallback.class feignclient name runclient url localhost 8001 public inte ce productclientse...
FeignClient日誌列印
一 使用feign原生的配置方式 1 新增配置類,設定日誌級別 slf4j configuration public class feignconfig 2 為需要列印日誌的類增加配置 feignclient url public inte ce requesttestapi logging.lev...