簡體   English   中英

在Azure WebJob中長達七天的Thread.Sleep

[英]Thread.Sleep for up to seven days in a Azure WebJob

我目前正在使用Azure WebJob應用程序,該應用程序具有隊列newUsersQueue 該隊列由關聯的網站填充,該網站在新用戶創建帳戶時將新用戶添加到該隊列中,並且Webjob的目的是向用戶發送電子郵件,如果他們在會員資格的第一周內沒有任何活動。 隊列中的每個對象都具有用於標識用戶的數據,以及一個DateTime RegisteredDate

我假設隊列將按用戶加入的日期排序,因此由於FIFO(先進先出),最老的用戶最終排在隊列中

然后,我當前的方法是從Webjob抓取隊列中的第一項,只需Thread.Sleep(DateTime.Now.Subtract(RegisteredDate.addDays(7)))

由於資源有限,我現在擔心這可能會很昂貴。 也許還有其他我沒想到的問題(此線程可能最多睡7天,浪費線程了?)?

是否有更好(更具成本效益)的方法來實現這一目標? 我一直在考慮使用計時器或類似的東西。 計時器/其他方法在睡眠中的好處是什么?

彈出隊列后,休眠一個星期是否會丟失其隊列消息? (是否將其加載到內存中並從隊列中刪除?)持久性當然也很重要。


根據到目前為止的經驗,我的決定基本上歸結為Azure Webjobs如何處理隊列。 它會隨意啟動新線程來處理排隊的消息,還是堅持使用1個線程,並花一些時間處理現有隊列?

換句話說,上述方法是為每個新用戶啟動一個新線程,還是會堅持一個線程並一次處理一個排隊的對象?

創建一個計划的WebJob

選擇重復執行,在需要時運行它,確保用於檢查標准中用戶的邏輯高效,如果您有很多用戶,這可能是最昂貴的部分。 如果沒有的話,這確實並不昂貴。

如果您擔心昂貴的查詢,可以采用的一種方法是將新用戶添加到另一個表中,每天檢查該表中是否有已登錄的用戶,然后將其從該表中刪除。 如果用戶有7天的時間,請發送電子郵件,然后刪除該用戶或對其進行任何處理。 然后,假設您每周只有300個新成員,則只需查詢300個用戶,而不是10k。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM