寻找一些自触发功能,在给定的时间开始。
例如:用户要在25/04/2019 05:30开始会议,用户应在25/04/2019 05:25 | 05:29收到会议即将开始的通知。
我创建了一个azure函数(Time triggred),它每分钟触发一次,并检查当前时间是否为会议时间-4分钟,然后发送有关会议开始的通知。
将来会有多个用户,所以我不希望函数每分钟运行一次,有没有一种方法可以让函数在05:25或会议时间自动执行。所以可以有100个用户,他们会有不同的用户。我只是在寻找如何以更好的方式实现的选项。
托管在azure上的.net核心站点每分钟运行一次azure函数,以检查其余部分
发布于 2019-03-22 14:25:07
当用户在会议上注册时,您可以使用visibility delay将消息(包含用户详细信息)排队到队列中
queue.AddMessage(message, initialVisibilityDelay: TimeSpanDelay);例如,用户在下午6点注册,而会议将在第二天下午8点,因此延迟时间将是25小时零55分钟(假设用户希望在会议前5分钟收到通知)。然后,代替时间触发函数,您将使用队列触发函数,当来自队列的消息变得可见时,该函数将发送通知:
public static void Run([QueueTrigger("notifications")]QueueTrigger message, TraceWriter log)
{
Notifier.Send(message.UserName, message.UserPhoneNumber, message.Email);
}此外,如果由于某种原因,您的通知处理程序将失败,队列消息不会丢失,因此您可以多次重试处理它们。
发布于 2019-03-21 11:54:53
我建议您使用quartz库编写一个windows服务来调度作业。您可以从db或其他地方获取作业调度时间。
发布于 2019-03-22 14:02:13
根据您的描述,您已经有了一个TimerTrigger函数,但是您的计时器会将该函数设置为每分钟运行一次。实际上,您可以使用CRON表达式设置更精确的定时器触发器。
这是Azure函数中的CRON表达式,它包括六个字段:{second} {minute} {hour} {day} {month} {day-of-week}。这样你就可以设置你的函数0 25,29 5 22 March *了。
在你将函数部署到Azure后,它将继续运行,但它不会执行Run方法,直到它触发计时器。
public static void Run(TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}


https://stackoverflow.com/questions/55273472
复制相似问题