1. 程式人生 > >C# ABP源碼詳解 之 BackgroundJob,後臺工作(一)

C# ABP源碼詳解 之 BackgroundJob,後臺工作(一)

技術分享 轉發 cbac wid 性能 更新 strong ron bst

本文歸屬作者所有,轉發請註明本文鏈接。

1. 前言

ABP的BackgroundJob,用來處理耗時的操作。比如客戶端上傳文件,我們要把文件(Excel)做處理,這耗時的操作我們應該放到後臺工作者去做,從而不會讓用戶有‘延遲’的感覺。

ABP的backgroundJob最終運行是在一個InMemoryBackgroundJobStore中運行,它只是定義了一個Dictionary來存儲job,並且遍歷運行 。當然,覺得不爽可以做改造。

2. 類圖研究

我整理了BackgroundJob一些類圖,如下:

技術分享

1)IRunnable,是定義了線程的開啟、停止等操作。因為backgroundJob說白了就是啟動線程在不停地運行。

2)IBackgroundJobManager,定義了Job的管理,例如吧Job放到隊列中運行。

3)PeriodicBackgroundWorkerBase,控制了線程AbpTimer的運行、停止、等待等操作。

4)IBackgroundJobStore,定義了插入、刪除、更新、查詢後臺工作者。現在的後臺工作者存儲在Member中(用InMemoryBackgroundJobStore實現),你可以改造存儲在數據庫、雲隊列中。

3. ABP Zero模塊中的BackgroundJobStore

我們打開ABP Zero模塊中的backgroundjob包,只發行一個類BackgroundJobStore。它實現了IBackgroundJobStore,並且把Job放到數據庫中來處理。這樣雖然安全性提高了,但是性能較低,需要看我們的實際業務。

BackgroundJobStore中有一個BackgroundJobInfo的倉儲(Repository),用來存儲所有的Job。

下一篇文章,將對其進行改造。因為我們的系統是一個高並發系統

C# ABP源碼詳解 之 BackgroundJob,後臺工作(一)