Thread.Sleep 在 Azure WebJob 中最多 7 天
Thread.Sleep for up to seven days in a Azure WebJob
我目前正在处理具有队列 newUsersQueue
的 Azure WebJob 应用程序。此队列由关联网站填充,该网站会在新用户创建帐户时将其添加到队列中,webjob 的 objective 将向用户发送电子邮件,如果他们在此期间没有 activity他们成为会员的第一周。队列中的每个对象都有用于识别用户的数据,以及一个 DateTime RegisteredDate
.
我假设队列将按用户加入的日期排序,因此最老的用户最先排在队列中,因为 FIFO(先进先出)
我目前的做法是从 webjob 中获取队列中的第一项,然后简单地 Thread.Sleep(DateTime.Now.Subtract(RegisteredDate.addDays(7)))
由于资源有限,我现在担心这可能会很昂贵。也许还有其他我没有考虑过的问题(这个线程可能会休眠长达7天,浪费线程?)?
是否有更好(更具成本效益)的方法来实现这一点?我一直在考虑使用计时器或类似的东西。 timer/other 方法比睡觉有什么好处?
队列消息从队列中弹出后休眠一周后是否有丢失队列消息的风险? (是否加载到内存并从队列中删除?)持久性当然也很重要。
根据我目前所了解的情况,我的决定基本上归结为 Azure Webjobs 如何处理队列。它会随意启动新线程来处理排队的消息,还是会坚持使用 1 个线程,并等待现有队列的时间?
换句话说,上述方法是为每个新用户启动一个新线程,还是坚持一个线程并一次处理一个排队的对象?
选择重复,运行 只要你想,确保你用来检查你的条件中的用户的逻辑是有效的,假设你有很多用户,这可能是最昂贵的部分。如果没有,这真的不贵。
如果您担心昂贵的查询,您可以这样做的一种方法是将新用户添加到另一个 table,每天检查此 table 是否有已登录的用户,将他们从这个table。如果用户达到 7 天,请发送电子邮件,然后删除或对他们做任何您想做的事情。那么,假设您每周只有 300 个新会员,那么您只需查询 300 个用户,而不是 10k。
我目前正在处理具有队列 newUsersQueue
的 Azure WebJob 应用程序。此队列由关联网站填充,该网站会在新用户创建帐户时将其添加到队列中,webjob 的 objective 将向用户发送电子邮件,如果他们在此期间没有 activity他们成为会员的第一周。队列中的每个对象都有用于识别用户的数据,以及一个 DateTime RegisteredDate
.
我假设队列将按用户加入的日期排序,因此最老的用户最先排在队列中,因为 FIFO(先进先出)
我目前的做法是从 webjob 中获取队列中的第一项,然后简单地 Thread.Sleep(DateTime.Now.Subtract(RegisteredDate.addDays(7)))
由于资源有限,我现在担心这可能会很昂贵。也许还有其他我没有考虑过的问题(这个线程可能会休眠长达7天,浪费线程?)?
是否有更好(更具成本效益)的方法来实现这一点?我一直在考虑使用计时器或类似的东西。 timer/other 方法比睡觉有什么好处?
队列消息从队列中弹出后休眠一周后是否有丢失队列消息的风险? (是否加载到内存并从队列中删除?)持久性当然也很重要。
根据我目前所了解的情况,我的决定基本上归结为 Azure Webjobs 如何处理队列。它会随意启动新线程来处理排队的消息,还是会坚持使用 1 个线程,并等待现有队列的时间?
换句话说,上述方法是为每个新用户启动一个新线程,还是坚持一个线程并一次处理一个排队的对象?
选择重复,运行 只要你想,确保你用来检查你的条件中的用户的逻辑是有效的,假设你有很多用户,这可能是最昂贵的部分。如果没有,这真的不贵。
如果您担心昂贵的查询,您可以这样做的一种方法是将新用户添加到另一个 table,每天检查此 table 是否有已登录的用户,将他们从这个table。如果用户达到 7 天,请发送电子邮件,然后删除或对他们做任何您想做的事情。那么,假设您每周只有 300 个新会员,那么您只需查询 300 个用户,而不是 10k。