gpt4 book ai didi

c# - 每天在用户指定时间发送电子邮件通知

转载 作者:行者123 更新时间:2023-12-03 05:12:00 26 4
gpt4 key购买 nike

我们使用 ASP Net Core 开发了一个应用程序,其中的使用需要获得批准。用户将在用户指定的时间收到待批准的电子邮件。

示例

user1 将接收电子邮件的时间设置为中午 12.55

user2 将接收电子邮件的时间设置为下午 4 点

我们已将用户设置的时间保存在数据库中,目前我们正在计时器触发器上运行Azure Function应用。该触发器将每 15 分钟运行一次,并检查 SQL 数据库中的用户通知时间。因此,如果用户将时间设置为中午 12.31 点,一旦触发器每 15 分钟运行一次,他就会在中午 12.45 点之后收到电子邮件。问题是用户必须等待 15 分钟,并且电子邮件未准时发送。

我们已经检查了 HangFire 重复作业,但问题是它每分钟都会调用我们的 SQL 数据库,这会导致性能影响。

有没有更好的解决方案可以在用户指定的时间发送电子邮件通知,而不需要每分钟调用 SQL 数据库来检查指定的用户时间是否可以发送通知?

最佳答案

您可以使用延迟传送的队列。

本质上,当创建条目时,您会将消息推送到队列中,并通过计算 DesiredTime - Now 来延迟其传递。然后您只需实现一个队列监听器即可。在所需的时间,一条消息将弹出到队列中并由您的工作人员处理。然后,您将新消息推送到队列中,延迟到下一个所需时间。

使用此解决方案,您可以在数据库压力几乎为零的情况下挂起大量电子邮件。它将水平扩展电子邮件的处理,并且立即具有相当好的可靠性。根据您使用的队列,成本也相当低。

您可以使用 Azure 存储队列来实现此目的。


CloudQueueMessage message = new CloudQueueMessage(requestBody);

// The message will be visible in the queue after 3 days
queue.AddMessage(message, initialVisibilityDelay: TimeSpan.FromDays(3));

您可能需要做一些额外的事情来确保这是可靠的,例如启用死信队列并拥有重新排队机制,以防处理消息时出现错误。

引用文献

CloudQueueMessage.AddMessage

initialVisibilityDelay Nullable<TimeSpan>

A TimeSpan specifying the interval of time from now during which the message will be invisible. If null then the message will be visible immediately.

关于c# - 每天在用户指定时间发送电子邮件通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76285321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com