Soul閘道器原始碼探秘《九》 請求處理流程

2021-10-17 08:58:55 字數 1353 閱讀 1974

前文探索外掛程式鏈時提到,當有接收到乙個請求的時候,會到達soulwebhandlerhandle。本文會探索使用divideplugin外掛程式接收乙個請求到最終返回的全過程。

handle打上斷點,發起請求。可以通過左側呼叫棧來一點一點往前推處理的邏輯。

首先是進入到defaultwebfilterchain中的filter方法。

public mono

filter

(serverwebexchange exchange));

}

裡面是 reactor 響應式程式設計的**。目前還看不懂,但從類名以及方法名推測,應該是執行過濾器的操作。

接著往前依次經過filteringwebhandlerwebhandlerdecoratorexceptionhandlingwebhandler找到關鍵點是httpwebhandleradapter

可以看到在這個類中,以 request 和 response 這兩個引數生成了 soul 閘道器外掛程式鏈處理中的關鍵變數 exchange。

在這裡,生成了 request 和 response 兩個重要例項。

然後往前依次經過httpserverhandletcpserverbind找到關鍵點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...