郵件排隊傳送機制

2021-07-25 14:16:32 字數 1306 閱讀 9171

目前我們小組開發系統有乙個郵件提醒功能,但是使用一段時間後就經常有人反映沒有收到郵件提醒,檢視日誌,原來是郵件傳送頻率過高,被郵箱給退回來了,這時,我就在想,有沒有一種辦法可以實現不管有多少人不管他們什麼時候發,都能保證系統發郵件時以一定的時間間隔傳送。

我現在寫這篇文章的時候是這個機制剛剛測試成功之後,距離發現這個問題已經有大半個月之久了,在這過程中,我想過很多辦法,但都不了了之,這裡我也不想提及,我主要想講下這次的設計思路,我把它分為三個部分:郵件管理者、郵件傳送工具、郵件模型封裝。其中最重要的是郵件管理者,它必須是乙個公共資源,而且面對所有的執行緒來說它應該只有乙個例項。我設想的場景是這樣:很多個人在發郵件時不是直接就呼叫郵件傳送工具就發了,而是通知郵件管理者,並將這個郵件體給郵件管理者,郵件體有乙個郵件佇列,它把郵件體加入這個佇列,並且按照順序依次傳送這個佇列的郵件,每發完乙個,就把這個郵件體從佇列移除,直至全部發完。

這裡更深入思考的話就會發現,管理者依次傳送佇列的郵件這個操作還得設定乙個規則,我設定的規則是:當管理者不在工作狀態時(即沒有發郵件)收到乙個郵件時就立即開始發郵件這個過程,在這個過程中,如果這個過程沒有結束又有郵件過來了,就不應該再來這個過程,因為這個過程已經開始了,再來就沒有必要,哎,語言組織不好,描述的不太清楚,下面看**。

我這裡只展示管理者的**,因為其他兩個由於使用的框架不同具體實現也不同。

/**

* 公共郵件管理者

* 使用單例模式

* @author 張順

* */

public class mailmanager

public static mailmanager getinstance()

public void addmail(mailmodel mail) ;

}.start(); }

/*** 傳送郵件

可以看出基本上是以10分鐘間隔傳送(雖然有1秒左右的誤差)。

回想一下,管理者其實主要用到了單例模式的思想,別的好像也沒什麼。

事後,我想這個設計是不是可以拓展到其他好多地方,只要是這種需要對頻率進行控制的都可以,或者其他別的什麼沒想到的,就這樣,其他以後有什麼感想再寫。

Unity 訊息傳送機制 解析

通俗易懂點講,就是 乙個物體發出訊息,另外乙個,或者幾個物體可以同時接收到這一訊息並作出各自不同的行為 反饋,處理 那麼,首先,我們想到,需要什麼?i 我們需要的是訊息 例項 傳送者。訊息 例項 傳送者 我們需要的訊息,就能夠處理任何訊息。ii 怎麼把這個訊息傳送出去 訊息處理中心 iii 傳送者傳...

Unity 訊息傳送機制 解析

通俗易懂點講,就是 乙個物體發出訊息,另外乙個,或者幾個物體可以同時接收到這一訊息並作出各自不同的行為 反饋,處理 那麼,首先,我們想到,需要什麼?i 我們需要的是訊息 例項 傳送者。訊息 例項 傳送者 我們需要的訊息,就能夠處理任何訊息。ii 怎麼把這個訊息傳送出去 訊息處理中心 iii 傳送者傳...

Unity內建的三套訊息傳送機制的應用例項

簡介 1 例項中包含2個類檔案,sendmessage.cs 和 receivemessage.cs 分別為訊息傳送端和訊息接收端.2 unity內建的訊息傳送系統有乙個很特別的地方 即使接收端的方法型別為 private 或者 protected,也能夠收到資訊.3 unity內建了3套訊息機制,...