實際使用(yòng)時,有(yǒu)四種使用(yòng)URule Pro的方式,分(fēn)别是嵌入式模式、本地模式、客戶端服務(wù)器模式以及獨立服務(wù)模式。
嵌入式模式
所謂的嵌入式,是指将URule Pro直接嵌入到我們的Java Web應用(yòng)當中(zhōng),作(zuò)為(wèi)應用(yòng)的一部分(fēn)運行。這種模式的好處是配置起來比較簡單;而不好的地方在于因為(wèi)将URule Pro直接嵌入到我們的應用(yòng)當中(zhōng),如果我們有(yǒu)多(duō)個涉及到規則引擎的應用(yòng), 那麽每個應用(yòng)都需要嵌入一個URule Pro模塊,所以更多(duō)的時候我們使用(yòng)的是獨立服務(wù)模式。
本地模式
本地模式類似于嵌入式模式,所不同的是嵌入到我們客戶端應用(yòng)中(zhōng)的URule Pro模塊僅僅為(wèi)其規則計算部分(fēn)(core部分(fēn)),不含設計器部分(fēn)(console部分(fēn)); 之後将測試好的知識包導出為(wèi)一個.data格式文(wén)件,然後把文(wén)件放在客戶端應用(yòng)的一個指定目錄下或數據庫中(zhōng),這樣客戶端應用(yòng)在調用(yòng)知識包時就直接到這個指定目錄下或數據庫中(zhōng)查找目标.data文(wén)件并加載。
這種模式非常适用(yòng)于規則運行環境封閉,且需要對外部屏蔽規則設計細節的應用(yòng)需要,其部署模式簡單、快捷,一旦有(yǒu)新(xīn)的知識包放入指定目錄中(zhōng),客戶端應用(yòng)會自動檢測并加載新(xīn)的版本。
客戶端服務(wù)器模式
客戶端服務(wù)器模式是指将URule Pro部署為(wèi)一個獨立的Java Web應用(yòng),在這個應用(yòng)裏定義各個業務(wù)系統所需要業務(wù)規則,定義好後統一存儲到一個規則存儲倉庫當中(zhōng)。 業務(wù)系統要使用(yòng)規則時隻需要指定URule Pro Server的地址即可(kě)通過HTTP協議取到目标規則包,然後解析并運行,其運行模式图如下所示:在客戶端服務(wù)器模式下,一個URule Pro Server可(kě)以下挂多(duō)個需要用(yòng)到規則引擎的業務(wù)系統,但實際的業務(wù)規則在運行時還是發生在各個業務(wù)系統中(zhōng),而不是URule Pro Server上。
各個業務(wù)系統在運行業務(wù)規則時,會首先檢查要運行規則對應的規則包在本地緩存中(zhōng)是否存在,如果存在則直接使用(yòng),不存在則通過配置的URule Pro Server地址向Server發出使用(yòng)對應規則包的請求, URule Pro Server收到請求後會将指定的規則包序列化成JSON,通過HTTP協議傳遞給請求的業務(wù)系統。業務(wù)系統收到傳遞過來的規則包後,會首先對其進行反序列化,将JSON格式的規則包反序列化為(wèi)Java對象并在本地緩存下來,然後再使用(yòng)這個規則包進行業務(wù)規則的計算。
可(kě)以看到,在這個過程當中(zhōng),URule Pro Server隻負責業務(wù)規則的定義、編譯與發布,不負責具(jù)體(tǐ)的業務(wù)規則執行,具(jù)體(tǐ)的規則執行還是發生在各個業務(wù)系統當中(zhōng),可(kě)以大大減輕URule Server的壓力,使得規則的計算可(kě)以分(fēn)布到各個業務(wù)系統所在的服務(wù)器上, 從而可(kě)以根據需要對計算規則的服務(wù)器進行靈活的擴充。
客戶端服務(wù)器模式下的規則包更新(xīn)
在客戶端服務(wù)器模式下規則包的更新(xīn)有(yǒu)兩種方式:一種是主動推送方式;一種為(wèi)定時更新(xīn)的方式。
主動推送方式是指URule Pro Server在規則包更新(xīn)後,會主動将更新(xīn)後的規則包通過HTTP協議推送到配置好的各種客戶端業務(wù)系統應用(yòng)的緩存當中(zhōng),這樣各個客戶端業務(wù)系統中(zhōng)的規則包就可(kě)以與Server中(zhōng)的規則包時刻保持一緻, 但這種推送方式要求對應的各個客戶端業務(wù)系統應用(yòng)必須是一個标準Java Web應用(yòng),否則這種推送無法實現,如果您的客戶端業務(wù)系統應用(yòng)是一個Java應用(yòng),而非一個标準的Java Web應用(yòng),那麽要更新(xīn)規則包就不能(néng)采用(yòng)這種推送方式,而需要使用(yòng)定時更新(xīn)的方式。
定時更新(xīn)方式是指具(jù)體(tǐ)調用(yòng)規則的業務(wù)系統,可(kě)以通過相應的參數配置,周期性的檢查URule Pro Server上當前客戶端業務(wù)系統用(yòng)到的規則包是否有(yǒu)更新(xīn),如果有(yǒu)則主動從Server上取下來并序列化成Java對應緩存到當前業務(wù)系統中(zhōng)備用(yòng),如果沒有(yǒu)更新(xīn)則不做任何操作(zuò)。
所以如果您的業務(wù)系統是一個非Java Web應用(yòng),那麽更新(xīn)規則包可(kě)以采用(yòng)定時更新(xīn)的方式實現;相反如果您的業務(wù)系統是一個标準的Java Web應用(yòng),那麽主動推送和定時更新(xīn)兩種方式都可(kě)以,當然主動推送的方式更為(wèi)合适。
獨立服務(wù)模式
獨立服務(wù)模式也是規則引擎的傳統運行模式,那就是把規則的調用(yòng)以一個Restful服務(wù)的形式對外提供,客戶端可(kě)以是Java、C#、C++或Javascript,客戶端隻需要把标準的JSON格式的輸入數據提交給規則服務(wù)器,服務(wù)器調用(yòng)規則計算完成後會以JSON格式作(zuò)為(wèi)響應返回。Restful服務(wù)支持安(ān)全驗證, 提供完善的調用(yòng)測試頁(yè)面,同時對于輸入數據,還支持複雜的JSON數據嵌套,以最大限度滿足複雜業務(wù)需求;對于大批量并發調用(yòng),URule Pro提供完整的集群支持。