Spring Cloud Ribbon之URL重構(三)

童話述說我的結局發表於2020-12-19

接著前面的說,前兩篇中分析瞭解析和動態服務列表的獲取,這兩步完成後那接下來要做的事就是重組解析後的URL路徑和發起通訊了,這一步完成應該是在前面分析的RibbonLoadBalancerClient.execute方法中接著往下走

 

 

從Debugger中可以看到這個request返回的是LoadBalancerRequestFactory並且是一個lambda表示式,開啟進去看過後發現他返回的是一個LoadBalancerRequest,並且裡面有ServiceRequestWrapper包裝器增加了請求,包裝完成後由execution.execute(serviceRequest, body);執行返回一個ClientHttpResponse物件傳給LoadBalancerRequestFactory,所以我們要進入LoadBalancerRequestFactory裡面

 

 

 

進入後發現 apply方法是LoadBalancerRequest介面中的一個方法,且LoadBalancerRequest介面沒有實現類,那麼apply方法的實現是在哪裡實現的呢?

 

 

 竟然沒有實現那就只能回退看它的內部類是怎麼實現的

 

 

 點選execute方法進入第一個if判斷是前面執行的一個攔截,這個攔截是上篇中說的LoadBalancerInterceptor的攔截,這次的攔截進入的是else邏輯中,在else邏輯中可以看到最終會進行一個呼叫,在呼叫的過程中他會執行一個

equestFactory.createRequest(request.getURI(), method);這裡面的request我們已經很清楚是怎麼來的了,但這裡面的getURI是啥玩意還不清楚,所以可以進去看下

 

 

 進入ServiceRequestWrapper的getURI()方法,至於為什麼是ServiceRequestWrapper的URI這個應該就不用解析了吧,那是因為request是由前面的ServiceRequestWrapper傳的

 

 

走到這裡可以再Debugger再看下,從結果可以很清楚看到URL路徑得到了重構,

 

 點選reconstructURI進入重構邏輯

 

相關文章