本文的分析思路和之前的apache dubbo
是一樣的。
public mono
genericinvoker
(final string body,
final metadata metadata,
final serverwebexchange exchange)
throws soulexception
//獲取**物件
genericservice genericservice = reference.
refer()
;//省略了其他**
genericservice.$invoke
(metadata.
getmethodname()
, pair.
getleft()
, pair.
getright()
);return mono.
fromfuture
(future.
(ret -
>))
.onerrormap
(soulexception:
:new);
}
整個流程涉及到的類和方法如下:
soul-admin
端:
soul-bootstrap
閘道器端:
在本文的測試中,soul-admin
端和soul-bootstrap
閘道器端之間的資料同步是通過websocket
進行。所以在閘道器啟動的時候會進行資料同步操作。
public consumerconfig
build
(final metadata metadata)
optional.
ofnullable
(sofaparamextinfo.
gettimeout()
).ifpresent
(reference:
:settimeout)
; optional.
ofnullable
(sofaparamextinfo.
getretries()
).ifpresent
(reference:
:setretries);}
//從註冊中心獲取**服務
object obj = reference.
refer()
;if(obj != null)
", metadata.
tostring()
);cache.
put(metadata.
getpath()
, reference)
;//將服務資訊放到cache中去
}return reference;
}
在同步過程中,將所有的元資料資訊及註冊中心的服務放到了cache
中,在使用的時候,就會到這個cache
中去拿。就是在文章開始的地方提到的泛化呼叫。
public mono
genericinvoker
(final string body,
final metadata metadata,
final serverwebexchange exchange)
throws soulexception
//獲取**物件
genericservice genericservice = reference.
refer()
;//省略了其他**
genericservice.$invoke
(metadata.
getmethodname()
, pair.
getleft()
, pair.
getright()
);return mono.
fromfuture
(future.
(ret -
>))
.onerrormap
(soulexception:
:new);
}
小結:本文再次梳理了soul
閘道器中sofa
外掛程式裡面的服務是如何被載入的,包括服務的配置資訊和 **物件的生成。 soul閘道器 17 sofa外掛程式
之前的筆記裡面介紹過soul閘道器的dubbo外掛程式,它是靠dubbo的泛化呼叫來實現將http協議轉成dubbo協議。這次來看下soul閘道器的sofa外掛程式,首先把soul admin sofa示例專案 soul bootstrap依次啟動起來,看下效果。在soul admin裡面開啟sof...
soul閘道器學習sofa 外掛程式體驗(下)
首先回憶下程式沒有進入sofaplugin的可能原因 外掛程式狀態沒有開啟直接沒有執行直接 首先確認了狀態已經開啟,debug發現我的外掛程式鏈裡面並沒有sofa外掛程式 懷疑沒有初始化sofaplugin 再次看了波官網檢查了下閘道器日誌 發先輸出日誌裡面sofa外掛程式沒有被載入 找到原因 在閘...
soul閘道器原始碼解析 sofa接入 sofa外掛程式
執行結果 遇到的問題 需要啟動乙個zookeeper 單機就行了 檢查下 soul bootstrap 的pom檔案下是否存在以下配置 com.alipay.sofa sofa rpc all 5.7.6 org.apache.curator curator client 4.0.1 org.apa...