【发布时间】:2020-06-23 16:41:27
【问题描述】:
我正在构建一个队列处理 web 作业以从队列中读取消息并使用数据从 blob 存储中检索报告 uri,然后将其作为电子邮件中的链接发送。我的流程运行良好,但我需要在特定时间窗口内发送电子邮件。
我有另一个进程 (webjob) 从 sql 后端检索此数据并将其放入电子邮件队列中。
此网络作业每 30 分钟运行一次,并且仅获取当天和当前时间的 2 小时窗口内的数据。所以我知道队列中的任何内容都适用于今天和“现在”后的 2 小时内。我将如何进一步缩小范围以从队列中读取数据,如果“电子邮件发送”时间设置为 19:00 而当前时间为 18:00,我可以将此消息放回队列中以读取它再稍后,下次应该更接近 19:00 时,我可以处理它并通过电子邮件发送出去。
时间不一定是准确的,所以即使它在 19:00 的 30 分钟内(或任何设置发送的时间)也可以处理。所以我有效地从队列中取出一个对象,检查它的时间,如果它不在分配的“电子邮件发送”时间的 30 分钟内,我将它放回队列中并再次处理
** 在我的网络作业中,我有一个“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 个网络作业还是仅使用 1 个网络作业。一个小要求:请花点时间格式化您的问题,然后将其分成几段。读一大段很痛苦:)。
-
我有 2 个网络作业,一个从后端获取“今天 2 小时内”的数据,创建任何指定的报告并将其放入 blob 存储中。另一个读取此数据,并通过电子邮件将 blob (pdf) 的 URI 发送出去。我正在使用 Azure 存储队列
-
对格式缺失表示歉意 :-)
标签: c# azure azure-queues