Soul閘道器中的Http服務探活

2021-10-18 04:14:00 字數 2803 閱讀 6690

服務探活機制是為了發現系統中上下游服務的的狀態。當有新的服務註冊時要通知其他系統,當有服務下線時也要告知其他系統。

soul閘道器中有對http服務處理的探活,所有的服務物件儲存在soul-adminupstream_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

}}

小結,本篇文章介紹了在soulsoul-adminsoul-bootstrap閘道器對服務的探活機制,主要實現類分別是upstreamcheckserviceupstreamcachemanager

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 建立乙個定時任...