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