ESFramework介绍之(14)-- AS与FS通信方案
??? 前面我們已經(jīng)多次提到,每個(gè)AS都有一組FS為之服務(wù)(回顧),AS將接收到的功能請求通過Tcp連接池?或Remoting轉(zhuǎn)發(fā)給某個(gè)FS處理。下面我們將深入討論AS和FS之間的通信機(jī)制。
??? 首先要解決第一個(gè)問題,AS如何知道每個(gè)為之服務(wù)的FS的地址?
??? 最常見的一種解決方案是,AS處的配置文件中有一個(gè)FS地址列表,AS每次啟動(dòng)時(shí),就讀取這個(gè)列表,然后與列表中的每個(gè)FS建立Tcp連接池。這種方案很容易實(shí)現(xiàn),但是有很多缺點(diǎn)。最主要的是當(dāng)動(dòng)態(tài)的添加/移除FS時(shí),都需要修改AS配置文件中的FS地址列表,而且當(dāng)FS的IP發(fā)生變化時(shí),也需要修改這個(gè)列表。所以這個(gè)列表的維護(hù)是相當(dāng)麻煩的。
??? ESFramework全力支持的是另一種非常靈活的方案,在這種方案中,AS的配置文件中不用保存任何FS的信息,為AS服務(wù)的FS的地址都是在運(yùn)行時(shí)由FS自己通知給AS的。這樣,在動(dòng)態(tài)的添加/移除FS時(shí),AS及其配置文件不用作任何變動(dòng)。我們知道,AS和FS之間的所有功能通信是通過TCP連接池進(jìn)行的,在這種情況下,AS是主動(dòng)聯(lián)系FS。而AS和FS之間的非功能通信通過Remoting或WebService的方式來完成,即當(dāng)FS啟動(dòng)時(shí),將自己的地址信息通過AS發(fā)布的遠(yuǎn)程服務(wù)接口告訴給AS,然后AS再根據(jù)這個(gè)地址去與FS建立TCP連接池。在非功能通信中,是FS主動(dòng)聯(lián)系A(chǔ)S,所以FS不需要發(fā)布遠(yuǎn)程服務(wù)接口,FS只需要知道AS發(fā)布的遠(yuǎn)程服務(wù)的地址即可(通常這個(gè)服務(wù)地址記錄在FS的配置文件中)。?
?? 需要解決的第二個(gè)問題是,當(dāng)網(wǎng)絡(luò)出現(xiàn)故障后恢復(fù)或服務(wù)器(AS或FS)重啟后,AS與FS之間的連接池如何恢復(fù)?主要可分為下面三種情況討論。
(1)第一種情況:當(dāng)FS正常工作一段時(shí)間后重啟:
????? 每次FS啟動(dòng)/重啟時(shí)都向向AS發(fā)送“我啟動(dòng)了”的消息,這樣AS就去主動(dòng)與FS建立Tcp連接池或恢復(fù)已存在的連接池。
(2)第二種情況是AS重啟:
????? 這中情況下有兩種解決辦法:一是在FS上加個(gè)按鈕,當(dāng)AS重啟后,工作人員點(diǎn)擊按鈕,給AS發(fā)送“本FS啟動(dòng)了”的信息。二是FS通過Remoting定時(shí)給AS發(fā)送Check消息,當(dāng)發(fā)生Remoting異常時(shí),FS就知道AS掉線了。AS掉線后,FS就定時(shí)給AS發(fā)送“我啟動(dòng)了”的消息,直到AS重啟完畢。ESFramework對第二種方式進(jìn)行了全力的支持。
(3)第三種情況是網(wǎng)絡(luò)斷開后恢復(fù):
????? 這種情況可以由Tcp連接池自動(dòng)重連機(jī)制來解決。
?????? AS與FS之間的通信的兩個(gè)主要問題都已經(jīng)解決了,最后我還想額外補(bǔ)充一點(diǎn),那就是關(guān)于“定時(shí)Check消息”的。在ESF平臺(tái)上,有很多地方需要使用“定時(shí)Check消息”的機(jī)制,這種機(jī)制主要用于使對方確認(rèn)消息發(fā)送者還在線上。比如,手機(jī)通過移動(dòng)與我們的AS建立了Tcp連接,當(dāng)手機(jī)掉線時(shí),移動(dòng)與AS之間的Tcp連接并沒有斷開,所以AS并不知道手機(jī)客戶掉線了。所以,AS要求,手機(jī)每隔一定時(shí)間就要向AS發(fā)送“Check消息”以表明自己在線,如果在指定的時(shí)間間隔內(nèi),AS沒有收到該手機(jī)的“Check消息”,則AS認(rèn)為該手機(jī)已經(jīng)不在線,馬上斷掉其對應(yīng)的Tcp連接。上面的FS也定時(shí)向AS發(fā)送“Check消息”來表明自己一直在線。
?????? 而在AS與IRAS之間,也采用了同樣的機(jī)制。因?yàn)镮RAS需要管理所有在線AS的地址,所以AS也是每次啟動(dòng)時(shí)向IRAS發(fā)送“本AS啟動(dòng)了”的信息,并定時(shí)向IRAS發(fā)送“Check消息”來表明自己一直在線。關(guān)于IRAS的作用的更細(xì)討論,請關(guān)注下篇文章!
下一篇文章:ESFramework介紹之(15)-- IRAS
上一篇文章:ESFramework介紹之(13)-- 功能插件處理器工廠
轉(zhuǎn)到??:ESFramework 可復(fù)用的通信框架(序)?
總結(jié)
以上是生活随笔為你收集整理的ESFramework介绍之(14)-- AS与FS通信方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物流行业应用虚拟化解决方案
- 下一篇: 软件开发能力成熟度模型CMM介绍