服務探活機制是為了發現系統中上下游服務的的狀態。當有新的服務註冊時要通知其他系統,當有服務下線時也要告知其他系統。
soul
閘道器中有對http
服務處理的探活,所有的服務物件儲存在soul-admin
的upstream_map
中,這裡面的服務物件有兩個**,乙個來自於原有的資料庫,乙個來自於其他服務的註冊。
@component
public
class
upstreamcheckservice
在upstreamcheckservice
類中,在構造器執行完後,會執行setup()
方法。裡面做了兩件事情:
//在構造器只執行完,執行這個方法
@postconstruct
public
void
setup()
}}//是否開啟探活機制,預設開啟
if(check)
}
定時任務每10秒就去檢查服務的狀態,並且更新服務資訊。
private
void
scheduled()
}private
void
check
(final string selectorname,
final list
upstreamlist)
else
is fail "
, divideupstream.
getupstreamurl()
);}}
//都存活
if(successlist.
size()
== upstreamlist.
size()
)//部分存活,只保留存活的,去除失活的服務
if(successlist.
size()
>0)
else
}
檢查過程是通過socket
進行連線,能夠連線成功,則服務是好的,否則就認為服務連線失敗。
private
static
boolean
ishostconnector
(final string host,
final
int port)
catch
(ioexception e)
return
true
;}
有服務失活的時候,要傳送更新事件給閘道器。
private
void
updateselectorhandler
(final string selectorname,
final list
upstreams)
}}
當有新的服務啟動時,springmvcclientbeanpostprocessor
會處理介面資訊,向soul-admin
發起註冊請求"/soul-client/springmvc-register"
。當soul-admin
端接收到這個請求時,會做三件事情:
//接收 /soul-client/springmvc-register 請求的實現介面
public string registerspringmvc
(final springmvcregisterdto dto)
}//處理請求
string selectorid =
handlerspringmvcselector
(dto)
;handlerspringmvcrule
(selectorid, dto)
;return soulresultmessage.success;
}private string handlerspringmvcselector
(final springmvcregisterdto dto)
上面的服務探活是在應用服務和soul-admin
之間。其實,在閘道器也有乙個upstream_map
來儲存服務資訊。它裡面的服務**是soul-admin
發布事件來通知閘道器的,閘道器會對資訊進行處理,更新可用服務。
public
final
class
upstreamcachemanager
在閘道器這一邊,服務資訊處理流程是(假設資料同步採用的是websocket
):
另外,在閘道器的upstreamcachemanager
中,也有乙個每隔30秒的定時任務scheduled
去檢查服務的狀態資訊,但是這個預設是關閉的。
public
final
class
upstreamcachemanager
}}
小結,本篇文章介紹了在soul
中soul-admin
和soul-bootstrap
閘道器對服務的探活機制,主要實現類分別是upstreamcheckservice
和upstreamcachemanager
。 Soul閘道器中的資料同步之Http長輪詢(二)
layout post title soul閘道器中的資料同步之http長輪詢 二 tags soul zookeeper websocket資料同步的機制比較簡單,而http同步會相對複雜一些。soul借鑑了apollo nacos的設計思想,取其精華,自己實現了http長輪詢資料同步功能。注意,...
Soul閘道器中的Sofa外掛程式執行原理(二)
本文的分析思路和之前的apache dubbo是一樣的。public mono genericinvoker final string body,final metadata metadata,final serverwebexchange exchange throws soulexception...
soul閘道器學習ip埠探活
soul admin端 upstreamcheckservice setup 啟動載入後初始時候從db查詢出來放入upstreammap setup selectors of divide plugin.postconstruct public void setup if check 建立乙個定時任...