基于服務(wù)注冊的服務(wù)網(wǎng)關(guān),支持TCP/HTTP服務(wù)代理轉(zhuǎn)發(fā),支持WEBSOCKET,代理和session共享
網(wǎng)關(guān)的簡單介紹
一般中小型項(xiàng)目(單體),由于業(yè)務(wù)比較單一,不想將項(xiàng)目重構(gòu)成分布式系統(tǒng),一是減輕運(yùn)維成本,二是業(yè)務(wù)量也沒有達(dá)到,在不重構(gòu)項(xiàng)目的前提,使用本網(wǎng)關(guān)可以實(shí)現(xiàn)服務(wù)的動態(tài)注冊,健康檢查,ip黑白名單過濾等操作,還可以優(yōu)雅的解決websocket集群負(fù)載情況下session共享問題.
項(xiàng)目地址:https://gitee.com/guoxiangyu11111/gogw.git
一,網(wǎng)關(guān)的服務(wù)注冊
網(wǎng)關(guān)支持配置文件服務(wù)注冊,同時(shí)也支持接口服務(wù)注冊,并且支持心跳檢測,在服務(wù)注冊的時(shí)候如果指定心跳頻率為0,那么網(wǎng)關(guān)就不會對其進(jìn)行健康檢查,反之網(wǎng)關(guān)會根據(jù)心跳情況對服務(wù)進(jìn)行健康檢查,如果服務(wù)異常會根據(jù)一定的降權(quán)規(guī)則,進(jìn)行降權(quán),最終會移除服務(wù),同時(shí)服務(wù)也可以進(jìn)行集群負(fù)載,不管是http還是tcp都可以,網(wǎng)關(guān)則會使用加權(quán)輪訓(xùn)算法對服務(wù)進(jìn)行負(fù)載輪訓(xùn)轉(zhuǎn)發(fā),這樣就可以達(dá)到動態(tài)服務(wù)注冊,動態(tài)轉(zhuǎn)發(fā)
二,網(wǎng)關(guān)的HTTP模塊


網(wǎng)關(guān)可以基于服務(wù)進(jìn)行http注冊(基于http接口進(jìn)行的服務(wù)注冊,服務(wù)心跳),也可以基于ui面板進(jìn)行服務(wù)注冊,注冊的時(shí)候如果指定健康檢查時(shí)間間隔,網(wǎng)關(guān)則會定時(shí)根據(jù)服務(wù)心跳情況進(jìn)行健康檢查,如果檢查時(shí)間間隔為0,網(wǎng)關(guān)則不會進(jìn)行服務(wù)檢查,服務(wù)注冊后,即可進(jìn)行http代理轉(zhuǎn)發(fā)同時(shí)也可以進(jìn)行websocket代理轉(zhuǎn)發(fā),這個后面會說到
三,網(wǎng)關(guān)的TCP模塊



網(wǎng)關(guān)不僅支持http代理轉(zhuǎn)發(fā),同時(shí)也支持tcp代理轉(zhuǎn)發(fā),并且支持多端口映射tcp服務(wù),并且支持管理本地監(jiān)聽端口
四,網(wǎng)關(guān)的WEBSOCKET模塊


當(dāng)http服務(wù)中含有websocket接口時(shí),網(wǎng)關(guān)同樣也會對其進(jìn)行代理轉(zhuǎn)發(fā),并且對所有session會話進(jìn)行集中管理,在請求升級協(xié)議的websocket地址后面需要掛上會話ID,例如ws://localhost:9307/ws?chanId=1,其中chanId這個參數(shù)如果想用網(wǎng)關(guān)進(jìn)行管理session就帶上如果不想用網(wǎng)關(guān)管理就可以不帶,通常情況下,當(dāng)服務(wù)進(jìn)行集群負(fù)載的時(shí)候,想主動給某個會話推送,一般會借助于redis的發(fā)布訂閱,然后服務(wù)端會對其進(jìn)行判斷判斷當(dāng)前服務(wù)是否有該會話,如果有則進(jìn)行推送,這種情況不夠優(yōu)雅,所以網(wǎng)關(guān)為了解決這種情況,就對所有的會話進(jìn)行了統(tǒng)一管理,并且對外提供一個http接口,如果想主動推送的話可以直接調(diào)用http接口進(jìn)行推送.