專利名稱:事件訂閱的方法及系統的制作方法
技術領域:
本發明涉及通信技術領域,尤其涉及事件訂閱的方法及系統。
背景技術:
隨著電信業務的飛速發展,電信系統中模塊數量越來越多,并且各個模塊間的相互關系也越來越緊密,當電信系統中的一個模塊關心系統中的另一個或一組模塊的狀態時,可以通過訂閱相關的事件來實時獲取相應的狀態變化通知,這樣也促使事件訂閱在電信系統中使用頻繁。
目前主要有兩種事件訂閱的方法,一種是單獨訂閱,即一個模塊在訂閱事件時僅能獨立訂閱事件,當該事件發生時,這個模塊接收到事件中心發送的事件通知。
此方案只能訂閱單獨的一個事件,但是在電信系統中,事件訂閱者往往同時關注多個事件,比如一個模塊接收到事件E1和E2時,將發起動作A1,但是在該技術方案中由于E1和E2分別到達該模塊,則該模塊必須緩存之前發生的事件,并且對其是否失效進行判斷,當E1和E2同時有效時觸發動作A1,這就導致該模塊的相應處理邏輯復雜化,而且系統中類似的情況比較多,重復的處理邏輯在同一個系統中多次出現,就直接導致系統的開發效率和運行可靠性受影響。
現有另一種方法是簡單的組合訂閱,其思想是一個模塊可以同時訂閱一組事件,當這組事件同時有效時,這個模塊接收到事件中心的通知,則觸發相應的后續動作。參見圖1所示,圖1為所述方法的處理流程圖步驟101、事件訂閱者向事件中心訂閱一組事件;步驟102、系統模塊檢查到自身狀態改變,發布事件;步驟103、事件中心收到事件,判斷得到事件訂閱列表中某一模塊訂閱的一組事件同時有效,發送事件通知給該事件訂閱者;步驟104、事件訂閱者收到事件通知,執行相應操作。
使用這種方法,雖然能夠處理訂閱一組事件時的情況,但不能處理邏輯關系為“或”的情況,更不能處理復雜邏輯的情況;在實現事件訂閱過程中,需要為每個邏輯關系設計處理代碼,即要求處理代碼與邏輯關系緊耦合,因而不利于系統擴展,而且系統中邏輯類似的情況比較多,重復的邏輯關系在同一個系統中多次出現,需要分別對每個邏輯關系提供代碼,就直接導致系統的開發效率低;如果某個事件訂閱的邏輯關系需要改變,就需要重新編寫處理代碼,并且在系統停止運行時才能更新,使系統不能連續運行。
發明內容
本發明要解決的技術問題是提供事件訂閱的方法及系統,能夠實現復雜邏輯關系的事件訂閱。
為解決上述技術問題,本發明的目的是通過以下技術方案實現的一種事件訂閱的方法,該方法包括以下步驟A、事件訂閱者向事件中心發送含有事件邏輯關系的事件訂閱;系統模塊檢測到自身狀態發生改變,向事件中心發布事件;B、所述事件觸發布爾邏輯運算主體將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對所述事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則觸發所述事件訂閱者執行相應的操作。
優選的,該方法還包括布爾邏輯運算主體維護活動事件列表,并將所有處在所述列表中的事件在布爾邏輯運算中的值置為True,未置于所述列表中的事件在布爾邏輯運算中的值置為false;布爾邏輯運算主體將發布的事件置于所述活動事件列表;布爾邏輯運算主體從所述活動事件列表中刪除無效的事件。
優選的,該方法進一步包括布爾邏輯運算主體維護事件訂閱列表,將事件訂閱者的事件訂閱置于所述事件訂閱列表;并在所述事件訂閱列表中對保存的事件訂閱進行修改或刪除。
優選的,步驟A中事件訂閱者向事件中心發送事件訂閱后進一步包括事件中心判斷所述事件訂閱中的事件是否在預置的事件列表中,如果否,向所述事件訂閱者返回訂閱失敗,結束本流程;
步驟A中系統模塊向事件中心發布事件后進一步包括事件中心判斷所述事件是否在預置的事件列表中,如果否,結束本流程。
優選的,步驟A中事件訂閱者向事件中心發送事件訂閱后進一步包括事件中心判斷所述事件訂閱中的事件是否在預置的事件列表中,如果否,獲取所述事件的信息,在所述事件列表中增加該事件;步驟A中系統模塊向事件中心發布事件后進一步包括事件中心判斷所述事件是否在預置的事件列表中,如果否,獲取所述事件的信息,在所述事件列表中增加該事件。
優選的,所述布爾邏輯運算主體為事件中心;步驟A中事件訂閱者向事件中心發送事件訂閱后進一步包括事件中心檢查所述事件邏輯關系的語法是否正確,如果否,向事件訂閱者返回訂閱失敗,結束本流程。
優選的,所述布爾邏輯運算主體為事件中心,步驟B具體為B11、所述事件被事件中心收到后,事件中心將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對所述事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則向事件訂閱者發事件通知;B12、事件訂閱者收到所述事件通知后,執行相應的操作。
優選的,所述布爾邏輯運算主體為事件訂閱者,步驟B具體為B21、所述事件被事件中心收到后,事件中心將該事件發送給事件訂閱者;B22、事件訂閱者收到事件中心轉發的所述事件后,將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對所述事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則執行相應的操作。
優選的,所述事件訂閱者為系統中任一關注系統中事件的模塊。
一種事件訂閱系統,該系統包括事件訂閱者、事件中心和系統模塊,其中事件訂閱者用于向事件中心發送含有事件之間邏輯關系的事件訂閱,接收事件中心的事件通知,并在接到所述通知后執行相應的操作;系統模塊用于檢查自身狀態,如果狀態發生改變,向事件中心發布事件;
事件中心用于向事件訂閱者提供事件訂閱接口,向系統模塊提供事件發布接口,接收事件訂閱者的事件訂閱請求,接收系統模塊發布的事件,當事件發布時,將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對事件邏輯關系執行布爾邏輯運算,如果布爾邏輯運算結果為True,給事件訂閱者發事件通知。
優選的,事件中心還用于維護活動事件列表,如果系統模塊發布一個事件,將該事件加入活動事件列表,將所有置于所述列表中的事件在布爾邏輯運算中的值置為True,未置于所述列表中的事件在布爾邏輯運算中的值置為false,并刪除所述列表中無效的事件。
優選的,所述事件中心還用于檢查邏輯關系的語法是否正確,如果否,給事件訂閱者返回訂閱失敗消息。
優選的,所述事件中心還用于檢查事件訂閱中的事件是否在預置的事件列表中,如果否,獲取事件信息,在所述列表中增加該事件;還用于檢查發布的事件是否在預置的事件列表中,如果否,還用于獲取事件信息,在所述列表中增加該事件。
優選的,事件中心還用于維護訂閱列表,如果事件訂閱者訂閱事件,事件中心將該訂閱加入訂閱列表,并在所述列表中修改或刪除事件訂閱。
一種事件訂閱系統,該系統包括事件訂閱者、事件中心和系統模塊,其中事件訂閱者用于向事件中心發送含事件之間邏輯關系的事件訂閱,當接收到事件中心的事件通知時,將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對事件訂閱的事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則執行相應的操作;系統模塊用于檢查自身狀態,當狀態改變時向事件中心發布事件;事件中心用于向事件訂閱者提供事件訂閱接口,向系統模塊提供事件發布接口,接收事件訂閱者的事件訂閱請求,接收系統模塊發布的事件,并將該事件轉發給事件訂閱者。
優選的,事件訂閱者還用于維護活動事件列表,如果接收到事件中心的事件通知,事件訂閱者將該事件加入活動事件列表,將所有置于所述列表中的事件在布爾邏輯運算中的值置為True,未置于所述列表中的事件在布爾邏輯運算中的值置為false,并刪除所述列表中無效的事件。
優選的,事件中心還用于檢查事件訂閱中的事件是否在預置的事件列表中,如果否,獲取事件信息,在所述列表中增加該事件;還用于檢查發布的事件是否在預置的事件列表中,如果否,還用于獲取事件信息,在所述列表中增加該事件。
優選的,事件訂閱者還用于維護訂閱列表,如果事件訂閱者訂閱事件,事件訂閱者將該訂閱加入訂閱列表,并在所述列表中修改或刪除事件訂閱。
從以上技術方案可以看出,本發明對事件邏輯關系執行布爾邏輯運算,所以能夠處理各種不同的邏輯關系;所有邏輯關系都由布爾邏輯運算主體進行處理,而且布爾邏輯運算主體能對所有的邏輯關系進行處理,所以不需要為每個邏輯關系設計處理代碼,使處理代碼與邏輯關系間的耦合性不強,不需要為每個邏輯關系單獨設計處理代碼,減少了系統的處理代碼,提高了系統的開發效率,而且代碼數量少就減少了系統出錯的可能;當系統需要進行擴展和升級時,事件中心只需要為新的模塊提供接口,而不需要對處理代碼進行大量的修改,減少了系統維護或升級的工作量;當事件訂閱者訂閱的事件的邏輯關系改變時,不用停止系統的運行來修改邏輯關系,只需要向事件中心重新訂閱事件,將新的邏輯關系交由布爾邏輯處理單元進行處理,就可以在運行中動態修改邏輯關系;事件中心還對系統事件進行注冊,在布爾邏輯運算中只對注冊的事件進行處理,使系統的運行可靠性更高,并且還可以對未注冊的事件進行注冊,便于系統的擴展和升級;執行布爾邏輯運算的主體還維護活動事件列表,定期刪除其中無效的事件,在執行布爾邏輯運算時,只有在活動事件列表中的事件取值才為True,布爾邏輯運算得到的結果更加可信,進一步提高了系統的運行可靠性。
圖1為現有技術二的處理流程圖;圖2為本發明一系統的結構圖;
圖3為本發明方法第一實施例的具體流程圖;圖4為本發明方法第二實施例的具體流程圖;圖5為本發明方法第三實施例的具體流程圖;圖6為本發明方法第四實施例的具體流程圖;圖7為本發明方法第五實施例的具體流程圖;圖8為本發明另一系統的結構圖;圖9為本發明方法第六實施例的具體流程圖;圖10為本發明方法第七實施例的具體流程圖;圖11為本發明方法第八實施例的具體流程圖;圖12為本發明方法第九實施例的具體流程圖。
具體實施例方式
本發明為事件訂閱的方法及系統,為使本發明的目的、技術方案、及優點更加清楚明白,以下參照附圖并舉實施例,對本發明進一步詳細說明。
先介紹一下本發明提供的系統,參見圖2所示,圖2為本發明一系統的結構圖,該系統主要由三部分組成事件訂閱者,事件中心和系統模塊。
其中,事件訂閱者是系統中的模塊,當它關注系統中事件時用于向事件中心訂閱事件,接收事件中心發送的事件通知;系統模塊可以為系統中任意一個模塊,也可以為事件訂閱者本身,它用于檢查自身狀態,如果自身狀態發生轉變,向事件中心發布事件。
其中,事件中心按功能可以分為四個功能單元事件管理單元,事件訂閱單元,事件發布單元和布爾邏輯處理單元,其中事件管理單元用于事件的注冊、事件列表的維護;如系統初始化時注冊事件E1、E2和E3事件;事件訂閱單元用于向設備中其他模塊提供事件訂閱接口;如圖2中的事件訂閱者由事件訂閱模塊提供的接口向事件中心訂閱事件“(E1&E2)|E3”;事件發布單元用于向設備中其他模塊提供事件發布接口;如圖2中的系統模塊檢查到器件1出現故障狀態則通過事件發布單元提供的接口發布E1事件,系統模塊檢查到器件2出現故障狀態則通過事件發布單元提供的接口發布E2事件,系統模塊檢查到器件3出現故障狀態則通過事件發布單元提供的接口發布E3事件;布爾邏輯處理單元用于當事件中心接收到發布的事件后,在當前事件訂閱列表中,執行訂閱邏輯,如果事件為活動狀態,則其布爾值為true,否則為false;如圖2中事件訂閱者訂閱了“(E1&E2)|E3”而當前活動事件列表中的E1=false,E2=false,E3=false,則當系統模塊發布事件E1后,布爾值分別為E1=true,E2=false,E3=false,則運算結果為false,不將該結果通知事件訂閱者;如果緊接著系統模塊發布E3事件,則測試運算結果為true,則將該結果通知事件訂閱者。
以上對本發明提供的系統進行了詳細描述,其中事件中心劃分為四個功能模塊只是為了描述方便而這樣劃分,在實際應用中,本領域技術人員可以根據系統和環境的需要對事件中心的功能單元進行不同的劃分,本發明并不對事件中心功能單元的劃分進行限定。
下面介紹本發明提供的方法的實施例,參見圖3,圖3為本發明方法第一從以上步驟可以看出,本發明在事件中心對事件進行布爾邏輯運算,所以不僅能夠處理“與”的情況,還能處理“或”的情況,所以能夠處理復雜邏輯的情況;因為事件中心提供專門的布爾邏輯處理功能,所以不需要對每一個訂閱提供對應的處理代碼,降低了處理代碼與邏輯關系的耦合性,有利于系統擴展;當事件訂閱者的事件訂閱的邏輯關系改變時可以隨時向事件中心提出更改,而不需要重新修改代碼,這樣就能在運行中動態修改運算邏輯,例如一個模塊訂閱的事件為“(E1&E2)|E3”,當事件發生變化,該訂閱需要更改為“(E1&E2)|(E3&E4)”時,只需要向事件中心重新發送一個訂閱請求。
參見圖4,圖4為本發明方法第二實施例的具體流程圖,本實施例與第一實施例相比增加了對事件訂閱的邏輯關系的語法進行檢查的功能。
步驟401、事件訂閱者向事件中心提供的訂閱接口發送事件訂閱請求;步驟402、事件中心判斷事件訂閱的事件邏輯關系的語法是否正確?如果是,事件中心將該訂閱加入訂閱列表,進入步驟404;如果否,進入步驟403;布爾邏輯處理單元提供一個語法解析器對事件訂閱的語法進行檢查,例如一個事件訂閱者訂閱的是“E1&(E2|E3”,語法檢查時發現缺少與“(”對應的“)”,這個邏輯關系就是語法不正確的,事件中心增加了對事件訂閱者的訂閱進行邏輯檢查,防止事件發布后對語法錯誤的邏輯關系執行布爾邏輯運算而導致的系統負荷增加。
步驟403、向事件訂閱者返回訂閱失敗消息,結束本流程;步驟404、系統模塊檢查到自身狀態改變,向事件中心發布事件;步驟405、事件中心收到發布的事件,將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對事件邏輯關系執行布爾邏輯運算,如果計算結果為True則發送通知給對應的事件訂閱者;步驟406、事件訂閱者收到事件通知,執行相應操作。
參見圖5,圖5為本發明方法第三實施例的具體流程圖,本實施例與第二實施例相比事件中心增加了維護事件列表的功能。
步驟501、事件中心維護一個事件列表,統一注冊全系統事件;注冊事件就是在列表中增加事件,記錄事件信息,包括事件的名稱或編號以及其它相關信息,如事件有效期,事件類型等。
步驟502、事件訂閱者向事件中心發送含有事件之間邏輯關系的事件訂閱;步驟503、事件中心判斷訂閱請求中的事件是否置于事件列表?如果是,事件中心將該訂閱加入訂閱列表,進入步驟505;如果否,進入步驟504;判斷是否置于事件列表中就是看是否能在事件列表中找到該事件;步驟504、向事件訂閱者返回訂閱失敗消息,結束本流程;步驟505、事件中心判斷訂閱請求的語法是否正確?如果是,進入步驟506;如果否,進入步驟504;步驟506、事件中心將該事件訂閱加入訂閱列表;事件中心維護訂閱列表,當有多個訂閱請求時能夠同時處理,而且也有利于對事件訂閱進行修改;步驟507、系統模塊檢查到自身狀態改變,向事件中心發布事件;步驟508、事件中心收到事件,判斷發布的事件是否置于事件列表?如果是,進入步驟510;如果否,進入步驟509;步驟509、對該事件不進行處理,結束本流程;步驟510、事件中心將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對事件邏輯關系執行布爾邏輯運算,如果計算結果為True則發送通知給對應的事件訂閱者;步驟511、事件訂閱者收到事件通知,執行相應操作。
本實施例中事件中心維護了一個事件列表,這樣執行布爾邏輯運算時的事件都在該事件列表中,防止對錯誤事件進行處理,使系統的運行可靠性更高。
參見圖6所示,圖6為本發明方法第四實施例的具體流程圖,本實施例與第三實施例相比事件中心增加了將沒有置于事件列表中的事件加入事件列表的功能。
步驟601、事件中心維護一個事件列表,統一注冊全系統事件;步驟602、事件訂閱者向事件中心發送含有事件之間邏輯關系的事件訂閱;
步驟603、事件中心判斷訂閱請求的語法是否正確?如果是,將該事件訂閱加入訂閱列表,進入步驟605;如果否,進入步驟604;步驟604、事件中心向事件訂閱者返回訂閱失敗消息,結束本流程;步驟605、事件中心判斷訂閱請求中的事件是否在事件列表中?如果是,事件中心將該訂閱加入訂閱列表,直接進入步驟607;如果否,進入步驟606;步驟606、事件中心從事件訂閱者處獲取該事件相關信息,將該事件加入事件列表;如事件訂閱中有一個事件E1,該事件不在表中,則事件中心從事件訂閱者獲取該事件的信息,如有效期、事件類型等信息,在事件列表中增加該事件,保存該事件的相關信息;因為事件訂閱者需要訂閱一個新的事件,它就有該事件的相關信息,所以事件中心要從事件訂閱者處獲取該事件的相關信息;步驟607、系統模塊檢查到自身狀態改變,向事件中心發布事件;步驟608、事件中心收到事件,判斷該事件是否在事件列表中?如果是,直接進入步驟610;如果否,進入步驟609;步驟609、事件中心從系統模塊處獲取事件相關信息,將該事件加入事件列表;因為系統模塊發布一個新的事件,它就有該事件的相關信息,所以此處事件中心要從系統模塊獲取該事件的相關信息;步驟610、事件中心將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對事件邏輯關系執行布爾邏輯運算,如果計算結果為True則發送通知給對應的事件訂閱者;步驟611、事件訂閱者收到事件通知,執行相應操作。
本實施例中事件中心將沒有置于事件列表中的事件加入事件列表,因為在系統擴展或升級中,會有許多新的事件出現,或者修改事件邏輯時也會使事件屬性發生變化,這樣做有利于系統的擴展或者升級;而且本實施例中先檢查事件訂閱的語法是否正確,然后再判斷事件是否置于事件列表,這兩個步驟的先后并不影響本發明的實現,本領域技術人員可以根據環境和系統的變化對步驟的順序做出調整,本發明并不限定這兩個步驟的執行先后順序。
參見圖7,圖7為本發明第五實施例的具體流程圖,本實施例與第四實施例相比事件中心增加了維護活動事件列表的步驟。
對比圖6,本實施例與第四實施例的不同僅在于步驟710、事件中心將該事件加入活動事件列表,將所有處在活動事件列表的事件在布爾邏輯運算中的值置為True,不在事件列表中的事件的值置為false,對事件邏輯關系執行布爾邏輯運算,如果計算結果為True則發送通知給對應的事件訂閱者。
本實施例中,系統模塊向事件中心發布有效事件后,事件中心都要將該事件加入活動事件列表,這樣在進行布爾處理時,只有在活動事件列表中的事件的取值才為True,不存在的則取值為false,例如活動列表中有E1、E2和E3這三個活動事件,E4和E5兩個事件都發布過,但是因為轉為無效而從活動事件列表中刪除,而一個訂閱為“(E1&E2&E3&E4)|E5”,因為只有E1、E2和E3三個取值為True,所以計算結果還是為false;并且事件中心還要定期的刪除活動事件列表中無效的事件,這是因為系統中的事件的有效期都是有限的,只有在有效期內的事件才是有效的,并且一個事件在有效期內也不一定是有效的,例如一個事件E6還在有效期內,系統模塊又發布一個事件E7,E7代表的模塊狀態和E6代表的模塊狀態剛好是該模塊的兩種不同的狀態,而且該模塊只有這兩種狀態,這時盡管E6還在有效期內也是無效的,所以要刪除,這樣布爾計算得到的結果更為可信,系統的運行可靠性就更高。
參見圖8,圖8為本發明提供的另一系統的結構圖,該系統與上一系統相比,布爾邏輯處理模塊置于事件訂閱者中,該系統主要由三部分組成事件訂閱者,事件中心和系統模塊。
其中,事件訂閱者為系統中的模塊,當它關注系統中的事件時用于向事件中心訂閱事件,接收事件中心發送的事件通知,還用于當接收到事件中心的事件通知后,維護活動事件列表,在當前事件訂閱列表中,執行訂閱邏輯,如果事件為活動狀態,則其布爾值為true,否則為false;如圖7中事件訂閱者訂閱了“(E1&E2)|E3”而當前活動事件列表中的E1=false,E2=false,E3=false,則當系統模塊發布事件E1后,布爾值分別為E1=true,E2=false,E3=false,則運算結果為false,不執行事件發生對應的操作;如果緊接著系統模塊發布E3事件,則測試運算結果為true,則執行事件發生對應的操作,還用于定期刪除活動事件列表中無效的事件。
系統模塊可以為系統中的任一模塊,也可以為事件訂閱者本身,用于檢查自身狀態,如果自身狀態發生轉變,向事件中心發布事件。
其中,事件中心按功能可以分為三個功能單元事件管理單元,事件訂閱單元,事件發布單元,其中事件管理單元用于事件列表的維護;如系統初始化時在事件列表中增加事件E1、E2和E3;事件訂閱單元用于向設備中其他模塊提供訂閱接口;如圖2中的事件訂閱者由事件訂閱模塊提供的接口訂閱事件“(E1&E2)|E3”;事件發布單元用于向設備中其他模塊提供事件發布接口;如圖7中的系統模塊檢查到器件1出現故障狀態則通過事件發布單元提供的接口發布E1事件,系統模塊檢查到器件2出現故障狀態則通過事件發布單元提供的接口發布E2事件,系統模塊檢查到器件3出現故障狀態則通過事件發布單元提供的接口發布E3事件;以上對本發明提供的另一系統進行了詳細描述,其中事件中心劃分為三個功能單元只是為了描述方便而這樣劃分,在實際應用中,本領域技術人員可以根據系統和環境的需要對事件中心的功能單元進行不同的劃分,本發明并不對事件中心功能單元的劃分進行限定,只要事件中心完成的功能相同都應該在本發明的保護范圍內。
參見圖9,圖9為本發明方法第六實施例的具體流程圖,該實施例是在圖8所描述的系統的基礎上實現的。
步驟901、事件訂閱者向事件中心發所述事件的訂閱請求,事件中心將該事件加入自身維護的事件訂閱列表;步驟902、系統模塊檢查到自身狀態改變,向事件中心發布事件;步驟903、事件中心檢查事件訂閱列表,向訂閱邏輯中含有該事件的事件訂閱者發送事件通知;步驟904、事件訂閱者收到事件通知,將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對訂閱列表中事件訂閱的事件邏輯關系執行布爾邏輯運算,如果結果為true,執行發生該事件對應的操作。
本實施例中,布爾邏輯運算是在事件訂閱者內進行的,因為能執行布爾邏輯運算,所以能處理復雜邏輯的情況,不需要對事件訂閱者的每一個訂閱提供對應的處理代碼,降低了處理代碼與邏輯關系的耦合性。
參見圖10,圖10為本發明方法第七實施例的具體流程圖,本實施例與第五實施例相比事件中心增加了維護事件列表的功能。
步驟1001、事件中心維護一個事件列表,統一注冊全系統事件;步驟1002、事件訂閱者向事件中心發送含有事件之間邏輯關系的事件訂閱;步驟1003、事件中心判斷訂閱請求中的事件是否置于事件列表中?如果否,進入步驟1004,如果是進入步驟1005;步驟1004、向事件訂閱者返回訂閱失敗消息,結束本流程;步驟1005、系統模塊檢查到自身狀態改變,向事件中心發布事件;步驟1006、事件中心判斷發布的事件是否置于事件列表中,如果否,進入步驟1007,如果是進入步驟1008;步驟1007、事件中心對該事件不做處理,結束本流程;步驟1008、事件中心檢查事件訂閱列表,向訂閱邏輯中含有該事件的所有事件訂閱者發送事件通知;步驟1009、事件訂閱者收到事件通知,將該事件的值置為True,未收到事件的值置為false,對訂閱列表中事件訂閱的事件邏輯關系執行布爾邏輯運算,如果結果為true,執行發生該事件對應的操作。
本實施例中事件中心維護了一個事件列表,這樣執行布爾邏輯運算時的事件都在該事件列表中,防止對錯誤事件進行處理,使系統的運行可靠性更高。
參見圖11,圖11為本發明方法第八實施例的具體流程圖,本實施例與第六實施例相比事件中心增加了將沒有置于事件列表中的事件加入事件列表的功能。
步驟1101、事件中心維護一個事件列表,統一注冊全系統事件;
步驟1102、事件訂閱者向事件中心發送含有事件之間邏輯關系的事件訂閱;步驟1103、事件中心判斷訂閱請求中的事件是否置于事件列表?如果否,進入步驟1104,如果是進入步驟1105;步驟1104、事件中心從系統模塊處獲取該事件的相關信息,對事件進行注冊;步驟1105、系統模塊檢查到自身狀態改變,向事件中心發布事件;步驟1106、事件中心判斷發布的事件是否置于事件列表,如果否,進入步驟1107,如果是進入步驟1108;步驟1107、事件中心對該事件不做處理,結束本流程;步驟1108、事件中心檢查事件訂閱列表,向訂閱邏輯中含有該事件的所有事件訂閱者發送事件通知;步驟1109、事件訂閱者收到事件通知,將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對訂閱列表中事件訂閱的事件邏輯關系執行布爾邏輯運算,如果結果為true,執行發生該事件對應的操作。
本實施例中事件中心將沒有置于事件列表中的事件加入事件列表,因為在系統擴展或升級中,會有許多新的事件出現,或者修改事件邏輯時也會使事件屬性發生變化,這樣做有利于系統的擴展或者升級。
參見圖12,圖12為本發明方法第九實施例的具體流程圖,與第八實施例相比本實施例事件訂閱者增加了維護活動事件列表的功能。
對比圖11,本實施例與第八實施例的不同僅在于步驟1209、事件訂閱者收到事件通知,將該事件加入活動事件列表,對所有在活動事件列表中的事件在布爾邏輯運算中的值置為True,未置于表中的事件的值置為false,對事件邏輯關系執行布爾邏輯運算,如果結果為true,執行發生該事件對應的操作。
本實施例中,事件訂閱者收到事件后將該事件加入活動事件列表,并且還要定期的刪除活動事件列表中無效的事件;這樣在進行布爾處理時,只有在活動事件列表中的事件在布爾邏輯運算中的值才為True,不存在的則取值為false,并且事件中心還要定期的刪除活動事件列表中無效的事件,這樣布爾計算得到的結果更為可信,系統的運行可靠性就更高。
以上對本發明所提供的事件訂閱的方法及系統進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發明的方法及其核心思想;同時,對于本領域的一般技術人員,依據本發明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。
權利要求
1.一種事件訂閱的方法,其特征在于,該方法包括以下步驟A、事件訂閱者向事件中心發送含有事件邏輯關系的事件訂閱;系統模塊檢測到自身狀態發生改變,向事件中心發布事件;B、所述事件觸發布爾邏輯運算主體將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對所述事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則觸發所述事件訂閱者執行相應的操作。
2.根據權利要求1所述的事件訂閱的方法,其特征在于,該方法還包括布爾邏輯運算主體維護活動事件列表,并將所有處在所述列表中的事件在布爾邏輯運算中的值置為True,未置于所述列表中的事件在布爾邏輯運算中的值置為false;布爾邏輯運算主體將發布的事件置于所述活動事件列表;布爾邏輯運算主體從所述活動事件列表中刪除無效的事件。
3.根據權利要求1所述的事件訂閱的方法,其特征在于,該方法進一步包括布爾邏輯運算主體維護事件訂閱列表,將事件訂閱者的事件訂閱置于所述事件訂閱列表;并在所述事件訂閱列表中對保存的事件訂閱進行修改或刪除。
4.根據權利要求1所述的事件訂閱的方法,其特征在于,步驟A中事件訂閱者向事件中心發送事件訂閱后進一步包括事件中心判斷所述事件訂閱中的事件是否在預置的事件列表中,如果否,向所述事件訂閱者返回訂閱失敗,結束本流程;步驟A中系統模塊向事件中心發布事件后進一步包括事件中心判斷所述事件是否在預置的事件列表中,如果否,結束本流程。
5.根據權利要求1所述的事件訂閱的方法,其特征在于,步驟A中事件訂閱者向事件中心發送事件訂閱后進一步包括事件中心判斷所述事件訂閱中的事件是否在預置的事件列表中,如果否,獲取所述事件的信息,在所述事件列表中增加該事件;步驟A中系統模塊向事件中心發布事件后進一步包括事件中心判斷所述事件是否在預置的事件列表中,如果否,獲取所述事件的信息,在所述事件列表中增加該事件。
6.根據權利要求1所述的事件訂閱的方法,其特征在于,所述布爾邏輯運算主體為事件中心;步驟A中事件訂閱者向事件中心發送事件訂閱后進一步包括事件中心檢查所述事件邏輯關系的語法是否正確,如果否,向事件訂閱者返回訂閱失敗,結束本流程。
7.根據權利要求1所述的事件訂閱的方法,其特征在于,所述布爾邏輯運算主體為事件中心,步驟B具體為B11、所述事件被事件中心收到后,事件中心將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對所述事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則向事件訂閱者發事件通知;B12、事件訂閱者收到所述事件通知后,執行相應的操作。
8.根據權利要求1所述的事件訂閱的方法,其特征在于,所述布爾邏輯運算主體為事件訂閱者,步驟B具體為B21、所述事件被事件中心收到后,事件中心將該事件發送給事件訂閱者;B22、事件訂閱者收到所述事件后,將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對所述事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則執行相應的操作。
9.根據權利要求1至8任一所述的事件訂閱的方法,其特征在于,所述事件訂閱者為系統中任一關注系統中事件的模塊。
10.一種事件訂閱系統,其特征在于,該系統包括事件訂閱者、事件中心和系統模塊,其中事件訂閱者用于向事件中心發送含有事件之間邏輯關系的事件訂閱,接收事件中心的事件通知,并在接到所述通知后執行相應的操作;系統模塊用于檢查自身狀態,如果狀態發生改變,向事件中心發布事件;事件中心用于向事件訂閱者提供事件訂閱接口,向系統模塊提供事件發布接口,接收事件訂閱者的事件訂閱請求,接收系統模塊發布的事件,當事件發布時,將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對事件邏輯關系執行布爾邏輯運算,如果布爾邏輯運算結果為True,給事件訂閱者發事件通知。
11.根據權利要求10所述的事件訂閱系統,其特征在于,事件中心還用于維護活動事件列表,如果系統模塊發布一個事件,將該事件加入活動事件列表,并刪除所述列表中無效的事件。
12.根據權利要求10所述的事件訂閱系統,其特征在于,所述事件中心還用于檢查邏輯關系的語法是否正確,如果否,給事件訂閱者返回訂閱失敗消息。
13.根據權利要求10所述的事件訂閱系統,其特征在于,所述事件中心還用于檢查事件訂閱中的事件是否在預置的事件列表中,如果否,獲取事件信息,在所述列表中增加該事件;還用于檢查發布的事件是否在預置的事件列表中,如果否,還用于獲取事件信息,在所述列表中增加該事件。
14.根據權利要求10所述的事件訂閱系統,其特征在于,事件中心還用于維護訂閱列表,如果事件訂閱者訂閱事件,事件中心將該訂閱加入訂閱列表,并在所述列表中修改或刪除事件訂閱。
15.一種事件訂閱系統,其特征在于,該系統包括事件訂閱者、事件中心和系統模塊,其中事件訂閱者用于向事件中心發送含事件之間邏輯關系的事件訂閱,當接收到事件中心的事件通知時,將該事件在布爾邏輯運算中的值置為True,未收到事件在布爾邏輯運算中的值置為false,對事件訂閱的事件邏輯關系執行布爾邏輯運算,如果運算結果為True,則執行相應的操作;系統模塊用于檢查自身狀態,當狀態改變時向事件中心發布事件;事件中心用于向事件訂閱者提供事件訂閱接口,向系統模塊提供事件發布接口,接收事件訂閱者的事件訂閱請求,接收系統模塊發布的事件,并將該事件轉發給事件訂閱者。
16.根據權利要求15所述的事件訂閱系統,其特征在于,事件訂閱者還用于維護活動事件列表,如果接收到事件中心的事件通知,事件訂閱者將該事件加入活動事件列表,并刪除所述列表中無效的事件。
17.根據權利要求15所述的事件訂閱系統,其特征在于,事件中心還用于檢查事件訂閱中的事件是否在預置的事件列表中,如果否,獲取事件信息,在所述列表中增加該事件;還用于檢查發布的事件是否在預置的事件列表中,如果否,還用于獲取事件信息,在所述列表中增加該事件。
18.根據權利要求15所述的事件訂閱系統,其特征在于,事件訂閱者還用于維護訂閱列表,如果事件訂閱者訂閱事件,事件訂閱者將該訂閱加入訂閱列表,并在所述列表中修改或刪除事件訂閱。
全文摘要
本發明公開了事件訂閱的方法及系統,其中,所述方法包括以下步驟A)事件訂閱者向事件中心發送含有事件之間邏輯關系的事件訂閱;系統模塊檢測到自身狀態發生改變,向事件中心發布事件;B)所述事件觸發布爾邏輯運算主體將該事件在布爾邏輯運算中的值置為True,未收到事件的值置為false,對所述邏輯關系執行布爾邏輯運算,如果運算結果為True,則觸發所述事件訂閱者執行相應的操作。使用該方法,能夠處理各種不同的邏輯關系,還能夠在運行中動態修改運算邏輯,同時布爾邏輯處理在事件中心進行,減少了系統的處理代碼,便于系統擴展和升級。
文檔編號H04M3/42GK1878206SQ200610101230
公開日2006年12月13日 申請日期2006年7月7日 優先權日2006年7月7日
發明者季小俊 申請人:華為技術有限公司