Im構建隊列處理webjob以從隊列中讀取消息並使用數據從blob存儲中檢索報告uri,然後將其作爲電子郵件中的鏈接發送。我的流程工作得很好,但我需要在特定的時間窗口內發送電子郵件。azure隊列存儲 - 將消息放回隊列
我有另一個進程(webjob)從sql後端檢索這些數據並將其放入電子郵件隊列中。
此webjob每30分鐘運行一次,並且只獲取當前時間和當前時間的2小時窗口內的數據。所以我知道排隊中的任何事情都是在今天和現在的2小時之內。我如何進一步縮小這個範圍以便從隊列中讀取數據,並且如果「發送電子郵件」時間設置爲19:00,當前時間爲18:00,則可以將該消息放回隊列中讀取再後來,下一次應該更接近19:00,然後我可以處理它並通過電子郵件發送出去。
時間不一定要被發現,所以即使它在19點30分鐘內(或者它的任何發送時間)也可以被處理。所以我有效地從隊列中取出一個對象,檢查它的時間,並且如果它不在其分配的「電子郵件輸出」時間的30分鐘內,我將它放回隊列中並且再次處理
**在我的webjob ,我有一個'Functions'類,它包含一個方法'ProcessQueueMessage',每當一個消息被放入隊列時它就會被觸發。
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public async Task ProcessQueueMessage([QueueTrigger("%reportgenerator%")] Data.Dto.Schedule.ScheduleDto schedule)
{
var reports = await this._scheduledReportGenerationService.GenerateScheduledEmails(schedule.ID);
}
的ScheduleDto類將有一代人的時間屬性,我可以讀這一點,它比較當前時間和僅在處理它的我指定的「時間窗口」內。我將如何停止隊列消息在這裏被刪除,以便我可以重新處理它?
您使用的是Azure存儲隊列還是服務總線隊列? –
另外,從您的問題來看,如果您使用2個webjobs或者只有1個webjob,則不清楚。一個小問題:請花一點時間,格式化你的問題,並在段落中分解。閱讀一個大的大段落是一個痛苦:)。 –
我有2個webjobs,一個從後臺獲取'今天2小時內'的數據,創建指定的報告並將其放入blob存儲中。另一個讀取這些數據,並通過電子郵件發送blob(pdf)的URI。我使用Azure存儲隊列 – proteus