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