一個可擴展的報警系統Quick-Alarm

一個可擴展的報警系統Quick-Alarm

背景

平常的系統中,報警是不可缺乏的一環,目前報警方式不少,最多見的有直接打日誌,微信報警,短信報警,郵件報警等;而涉及到報警,通常不可避免的須要提早設置一些基本信息,如報警方式,報警頻率,報警用戶,開關等;java

另一個常見的問題是通常採用的是單一的報警方式,好比無論什麼類型的報警所有都用短信方式觸達,而後就會發現手機時常處於被淹沒的狀態了,長此以往對報警短信就不會敏感了git

目標

所以咱們準備設計一個通用的報警框架github

  • 能夠自由選擇報警方式,
  • 支持用戶自定義報警方式拓展
  • 支持動態的報警配置,
  • 支持用戶自定義報警規則拓展
  • 支持報警方式自動切換規則設定
  • 支持報警方式自定義自動切換規則拓展

設計

總體來講,報警主要能夠劃分爲三個步驟,以下:微信

IMAGE

  • 提交報警:對外部使用者提供的接口
  • 選擇報警:根據報警相關信息,選擇具體的報警執行單元
  • 執行報警:實現具體的報警邏輯

從任務劃分上來看,比較清晰簡單,可是每一塊的內容又必須能夠拓展,架構

  • 選擇報警:框架

    • 報警規則的制定
    • 報警規則加載器 ConfLoader
    • 報警規則變動的觸發器 ConfChangeTrigger
    • 報警規則解析器
      • ConfParse : 解析文本格式報警規則爲業務對象
      • AlarmSelector :根據報警規則和報警類型,選擇具體報警執行器 AlarmExecute
  • 執行報警:學習

    • 線程池執行(以防止影響主業務流程)
    • AlarmExecute的動態拓展(支持用戶自定義的報警器實現)
    • 實際的報警邏輯

根據上面的拆解,在應用啓動的時候,就有一些事情必須去作了ui

  1. ConfLoader的選擇
  2. 報警規則加載
  3. AlarmExecute的加載(包括默認的+自定義實現的)

下圖顯示在應用啓動時,報警規則解析的相關步驟線程

應用啓動.png

至於報警執行器的加載就比較簡單了,以下圖設計

IMAGE

所以,整個的工做流程以下圖

alarm-arch.jpg

任務拆解

經過前面的任務設計以後,對須要作的東西有了一個大概的脈絡了,所以在正式操刀實現以前,下對整個架構進行任務拆解,看下能夠具體的執行步驟能夠怎麼來

  • 最直接的就是設計報警執行器AlarmExecute
    • 定義基本接口
    • 制定自定義擴展規則
  • 接下來就是設計報警規則
    • 如何加載報警規則?
    • 報警規則具體的定義細則
    • 報警規則的解析:即根據報警類型來獲取報警執行器
    • 報警規則動態更新支持
  • 報警線程池
    • 維護報警隊列
    • 報警的計數與頻率控制
  • 封裝對外使用接口

因此,經過上面的分析能夠看出,這個系統的結構仍是蠻簡單的,整個只須要四個部分就能夠搞定,其中最主要的就是前面兩個了,後面將分別說明

小結

作一個東西,固然是但願能夠帶來一些用處,或者能學習到什麼東西,纔不枉花費精力來折騰一下,那麼咱們這個報警系統,究竟有什麼用,或者能夠從中學習到什麼東西呢?

用途:

  • 支持靈活可配的報警規則,以及具體報警業務的自定義拓展
  • 目標就是統一報警的使用姿式,也就是無論什麼報警,都一個姿式,可是內部能夠玩出各類花樣,對使用者而言就方便簡潔了

學習:

拋開特有的知識點,能夠抽象一些公共可用的地方,大概就下面這兩點了

  • 咱們能夠如何支持功能的動態可拓展
  • 線程池的使用

IV. 其餘

相關博文

  1. 報警系統QuickAlarm總綱
  2. 報警系統QuickAlarm之報警執行器的設計與實現
  3. 報警系統QuickAlarm之報警規則的設定與加載
  4. 報警系統QuickAlarm之報警規則解析
  5. 報警系統QuickAlarm之頻率統計及接口封裝
  6. 報警系統QuickAlarm使用手冊

項目

聲明

盡信書則不如,已上內容,純屬一家之言,因本人能力通常,看法不全,若有問題,歡迎批評指正

掃描關注,java分享

QrCode

相關文章
相關標籤/搜索