開發說(shuō)明
Gateway采用SEDA事件驅動的(de)架構進行設計。
Messaging即消息處理機制,是(shì)一(yī / yì /yí)種基于(yú)消息的(de)、異步的(de)、消息驅動的(de)設計方式;事件驅動貫穿Gateway開發的(de)始終,是(shì)框架整體架構與基本功能模塊之(zhī)間交互的(de)基本方式。
消息處理(Messaging)說(shuō)明
- 消息(Message)——應用功能處理的(de)流轉對象(對應事件驅動中的(de)事件)
- 端點(Endpoint)——消息處理模塊
- 通道(dào)(Channel)——消息處理模塊的(de)串連、組裝
- 異步
- 增加攔截過濾、擴展功能的(de)插卸
- 耗時(shí)調用上(shàng)采用非阻塞方式,提高資源利用率
- 事件驅動( Event-Driven Architecture)
- 降低模塊、組件之(zhī)間的(de)耦合(通過事件)
- 組件隻需關心如何處理事件,不(bù)必關心如何與别的(de)組件交互
- 組件交互、事件流轉由通道(dào)(Channel)或者管道(dào)(Pipes)負責
- 管道(dào)+處理器(Pipes and Handler)的(de)架構風格
插件的(de)擴展方式
對于(yú)gateway來(lái)說(shuō), 任何功能幾乎都是(shì)可以(yǐ)擴展的(de), 目前應用時(shí)常用的(de)擴展類型主要(yào / yāo)有以(yǐ)下幾種: handler擴展, filter擴展, module擴展等
handler擴展:如權限校驗, 并發, 流控等直接可以(yǐ)獨立的(de)加到(dào)請求響應鏈中的(de)這(zhè)類插件稱做Handler.
- 特征:必須作用在(zài)請求響應鏈中, 并且需要(yào / yāo)自由控制其在(zài)請求響應鏈的(de)具體執行時(shí)間點, 如在(zài)某一(yī / yì /yí)插件前或插件後
- 應用場景:主要(yào / yāo)爲(wéi / wèi)需要(yào / yāo)依賴網關的(de)配置文件中的(de)配置信息執行該插件, 如response,參數映射,流控,并發等.
filter擴展:
- 特征:不(bù)需要(yào / yāo)依賴網關配置文件的(de)配置信息就(jiù)可以(yǐ)獨立執行, 但執行的(de)時(shí)間點是(shì)固定的(de), 比如在(zài)某個(gè)handler插件執行前後, 或者在(zài)網關的(de)某個(gè)connector執行前後.
- 應用場景:如需要(yào / yāo)采集Http請求的(de)請求頭或者報文體的(de)某些固定信息, 放到(dào)上(shàng)下文供後面使用, 或者按照某些需求以(yǐ)固定模式修改請求或響應信息
Module擴展:
- 特征:執行時(shí)獨立于(yú)請求響應鏈以(yǐ)外, 需要(yào / yāo)獲取全局的(de)請求響應信息, 即時(shí)性要(yào / yāo)求不(bù)是(shì)非常高的(de)
- 應用場景: 網關的(de)每次請求響應結束時(shí), 可以(yǐ)将該請求的(de)整個(gè)上(shàng)下文以(yǐ)事件非阻塞的(de)方式推送給網關的(de)事件隊列, Module類型的(de)擴展插件可以(yǐ)訂閱感興趣的(de)事件, 采集需要(yào / yāo)的(de)信息推送給其他(tā)系統或做自定義處理.