定時觸發問題

來源:互聯網
上載者:User

定時觸發問題

如果只是一個很少量的定時觸發。可能很多人會把哪個東西加到淺程池來實現。

而我們這邊的實現是採用隊列方式。 所有還沒有觸發的東西都放在一個隊列裡。並且按觸發時間排好。

比如說這是一個要求比較即時的。我們就不需要0.5S檢查一下這個東西時間是不是到了。 如果是以天為單位的。哪麼我們就要任務結束後計算出第二是什麼時候。DEMO在MailSender,webshop裡而都有。

我們順便看一下時間問題。

將來任務

這個任務必須在3天后觸發
TriggerTime = AddTime + 3days 這樣就是一個三天后的時間
然後程式什麼判斷呢?
兩種情況

  1. 現在時間還小於The Day,嗯時間還沒到任務不需要觸發.
  2. 時間大於 TheDay,任務做了嗎? 沒有做。哪就要敢緊做了? 換句話說,三天后要發也就是說現在必鬚髮三天前的東西,兩天前沒有關係。

很明顯第二個才是我們要的轉換程式思維一下
TriggerTime<CurrentTime
AddTime + 3 days <currentTime
AddTime < CurrentTime-3days
AddTime < DateTime.Now - 3days .這個是整數天 (周天)

有時候我們希望的是虛數天 (來源於虛歲,1出生就當做1歲了) 就是
TriggerTime.Date < DateTime.Today  (Date 和 Today 都是 00:00:00)
例子,比方說是3月1號 8點建立的。 本來我們是要等時間到 3月4號8點。但如果是虛數天的話。 8點建立到3月1號 23 點 59分59妙999毫秒就是一天。這是一個不完整的一天。也算做一天,就是虛數天。
為了資料庫查詢的方便我們就可以變成
TriggerTime<DateTime.Today + 23點 59分59妙999毫秒
 =>  TriggerTime<DateTime.Today.Adddys(1) 也不差一秒了。再遲這一秒關係不大
最終得出就是
 AddTime< DateTime.Today - 3adys +1;
將來任務我們一般是哪個實體本身會帶一個IsFinishTask的標誌,完成的時候我們就把它改天true了,查詢的時候我們就是Isfinish=false並配合時間來查詢。

因為我們只限制了他一定要做任務結果就是如果這一天錯過了(伺服器掛掉了),他也會補發。如果只想說這一天發到期了就不發了。
哪應該再加一個條件 TriggerTime>DateTime.Today.
或者是直接用日期了
TriggerTime.Date = CurrentTime.Today

到期任務

比如說有一個試用周期快到了,你希望提醒使用者來續約。 我們的直刻感覺就是下面的這種
(TotalTrialDays - SqlMethods.DateDiffDay(it.CreateTime, DateTime.Today)) == ReminingDays

實際上也是可以轉化成上面哪種 比如還剩2天的時候要提醒 TotalTrialDays-ReminingDays 所以
TraggerDay 就是 CreateTime + TotalTrialDays-ReminingDays
CreaeTime.Today <= DateTime.Today - TotalTrialdays +ReminingDays
TotalTrialdays + CreaeTime.Today <= DateTime.Today +ReminingDays
TotalTridays + CreateTime.Today-Today <= LevlDays
TotalTridays - (-CreateTime.Today+Today) <= LevlDays 小於的話就一定會觸發

跟上面的是一樣的
需要注意的是:
比如說有這樣的一個任務 Invoice在產生14天后還沒有被支付的話我們必鬚髮郵件告訴他。
我們必須考慮的是。如果我們的這個程式重啟了會不會造成這封郵件被多次好送。
我們必須記錄這個任務有被執行了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.