前文探索外掛程式鏈時提到,當有接收到乙個請求的時候,會到達soulwebhandler
的handle
。本文會探索使用divideplugin
外掛程式接收乙個請求到最終返回的全過程。
在handle
打上斷點,發起請求。可以通過左側呼叫棧來一點一點往前推處理的邏輯。
首先是進入到defaultwebfilterchain
中的filter
方法。
public mono
filter
(serverwebexchange exchange));
}
裡面是 reactor 響應式程式設計的**。目前還看不懂,但從類名以及方法名推測,應該是執行過濾器的操作。
接著往前依次經過filteringwebhandler
、webhandlerdecorator
、exceptionhandlingwebhandler
找到關鍵點是httpwebhandleradapter
可以看到在這個類中,以 request 和 response 這兩個引數生成了 soul 閘道器外掛程式鏈處理中的關鍵變數 exchange。
在這裡,生成了 request 和 response 兩個重要例項。
然後往前依次經過httpserverhandle
、tcpserverbind
找到關鍵點httpserveroperations
protected
void
oninboundnext
(channelhandlercontext ctx, object msg)
// ...
}
這裡是 netty server 接收請求的入口。再往前找就都是 netty 內部的呼叫棧,暫時略過。
至此,soul 閘道器之前的請求處理流程就如下圖所示
Soul閘道器原始碼學習05
soul web基於webflux 可以使用netty作為應用伺服器,eventloop 可以說是netty的排程中心,負責事件的監聽 i o事件 訊號事件 channelpipeline 事件處理鏈,channelhandler事件處理。相對於channelpipeline 而言netty事件分為...
Soul閘道器原始碼學習06
在soul閘道器中每個請求,都會通過責任鏈的方式執行相匹配的外掛程式,所以外掛程式也是soul閘道器的核心,soul閘道器的外掛程式是可插拔的,並且是外掛程式之間依賴關係是松耦合且外掛程式的功能實現高聚合,其次使用者可根據需求定製外掛程式滿足自己的需求。soul外掛程式配置類,使用 spring.f...
soul原始碼閱讀(九)soul所有外掛程式介紹
目錄 soul所有外掛程式列表 介紹每個外掛程式 context path外掛程式 divide外掛程式 dubbo外掛程式 springcloud外掛程式 sofa外掛程式 ratelimiter外掛程式 什麼是context path,就是使用者每次用乙個url訪問soul閘道器的時候,會根據c...