這裡看原文
本文只是提供乙個簡單的思考方向,實現方案只是舉例說明,如果讀者也需要乙個類似的功能,可以根據以下思路去完善。
在訂單系統的業務中通常會碰到類似這樣的功能
或者在逆交易中有類似這樣的需求
通常實現方案
基於這類需求經過分析抽象後,梳理出了乙個事件中心的概念,去解決這類問題
總體思路是業務放向事件中心註冊事件後,事件中心會主動傳送訊息或者是其他方式去通知到業務方,從而觸發業務**的執行。
事件中心以與業務不相關的方式去實現,統一向業務方提供服務,事件中心僅僅解決如何觸發的問題,減輕業務庫的壓力。
這並不意味著與業務耦合業務應用仍然可以以任何可以接受方式進行事件觸發,如公共的事件廣播,binlog。
時間時間用於處理多少時間後通知業務的場景,定時排程保證租戶id緯度單執行緒
增量事件用於處理數量到達一定值的時候觸發業務,第一次註冊建立事件,後續註冊增加值,超時機制只是確保乙個事件的失效不要讓業務依賴它,可以同時建立乙個時間事件補充,定時排程保證租戶id緯度單執行緒
按照以上的描述,業務仍然需要去自己管理事件,建立事件,取消事件。
所以我們在事件之上抽象一成事件管理器。這樣業務應用只需要抽象自己的業務本身,如訂單的建立可以對應乙個事件管理器支付可以對應乙個事件管理器。然後我們配置事件管理器的內容
我們舉例乙個支付事件管理器,它的主要工作如下
這樣我們把每個事件的三方id和對應的操作儲存在事件管理器中,並且事件管理器也可以有引數,我們可以配置這些引數傳給某個事件的某個字段。
本質上事件中心只是在技術視角上對一類功能進行抽象,從而解決如何找到需要被處理的資料的問題,然後將它們剝離出來,以降低業務應用的複雜度。在後續事件過多後,為了避免業務**與具體事件耦合,在事件之上再抽象了一層管理器,來幫助業務應用去維護好自己的事件。
as3事件訊息中心
在as2.0時代,我習慣於利用乙個自定義的全域性事件管理器來管理所有的事件.這樣的好處是便於後 期 結構維護.說白了也就是偷懶.但是無論如何,我很喜歡這種方法,所以在as3裡,我比較執拗的 想實現這個全域性事件管理器.如果說按照as2.0的思路,大致可以把事件分為三種,按鈕事件等公共事件,元件架構的...
任務6 事件中心模組
事件中心模式 1,事件中心 1 private dictionary eventdic new dictionary 2,新增事件監聽 1 2 新增監聽的事件 3 4 事件的名字 5 準備用來處理事件的委託函式 6public void addeventlistener string name,un...
基於事件的程式設計思想
緒論 我們所說的事件程式設計思想可以理解為生活中處理事件的一套機制。我和身邊的人說過無數次,計算機程式設計不是一門手藝或是單純的一門技術 不是理髮店理髮師那樣單純的理髮技術 也不是工地綁鋼筋那樣依靠刻意訓練就能達到的一門技術活兒 不是習武愛好者,不是賣油翁裡的唯手熟爾就能到達的絕技。我們把這次新冠疫...