Php 在企业web应用程序中处理计划/有时间限制的任务
表面上看,我面临的问题很简单。在企业web应用程序(LAMP stack)中,我们需要添加一些基于时间和计划的任务。例如Php 在企业web应用程序中处理计划/有时间限制的任务,php,web-applications,cron,scheduled-tasks,domain-driven-design,Php,Web Applications,Cron,Scheduled Tasks,Domain Driven Design,表面上看,我面临的问题很简单。在企业web应用程序(LAMP stack)中,我们需要添加一些基于时间和计划的任务。例如 当用户登录并保持活动状态超过30分钟时,向他们发送幸运优惠券 每周一向订户发送一份时事通讯。[由cron作业轻松处理] 如果用户在3天内没有登录,开始跟踪她。[可通过cron作业完成,但…] 每月第一个工作日9点从用户账户中扣除电话账单金额 在随后的每个工作日9点重复失败的扣减,最多重试15次 我希望这能让你了解需要处理的事情 目前,我们几乎在所有可能的情况下都有cron
- 当用户登录并保持活动状态超过30分钟时,向他们发送幸运优惠券
- 每周一向订户发送一份时事通讯。[由cron作业轻松处理]
- 如果用户在3天内没有登录,开始跟踪她。[可通过cron作业完成,但…]
- 每月第一个工作日9点从用户账户中扣除电话账单金额
- 在随后的每个工作日9点重复失败的扣减,最多重试15次
在我们开始用我提出的方法解决这个问题之前,有没有更好的方法来处理这类问题?整个场景中的关键点似乎是如何根据自域中发生Y事件以来经过的时间触发X事件。我相信我不是第一个面对这个问题的人,这个问题肯定早就解决了,但我不能偶然发现任何指向我正确方向的路标。我过去处理这个问题的方式是,在我知道应该发生什么事情时,立即将命令排队,然后调度器会在时间到了 调度器只是一个作为服务运行的进程,它每N毫秒唤醒一次,以查找已超过其ScheduledTime的任何命令 例如:
- 用户已登录。将命令排队30分钟,然后给他们优惠券。30分钟后,调度程序将发送命令。如果会话仍处于活动状态,则接受该命令并显示优惠券。否则,它将一事无成
CreateNewsletter (This is the batch) -> NewsletterCreated
Accounts.Each(SendAccountNewsletter) -> AccountNewsletterSent
NewsletterCompleted (This is the batch) ->
Queue(command: CreateNewsletter, when: NextMondayAt9) (This is the next batch)
希望有帮助
p.S.如果你在公交车上发布滴答声,你将有大量噪音需要过滤 我过去处理这个问题的方法是,在我知道应该发生什么事情时,立即将命令排队,然后调度程序将在时机成熟时发出命令 调度器只是一个作为服务运行的进程,它每N毫秒唤醒一次,以查找已超过其ScheduledTime的任何命令 例如:
- 用户已登录。将命令排队30分钟,然后给他们优惠券。30分钟后,调度程序将发送命令。如果会话仍处于活动状态,则接受该命令并显示优惠券。否则,它将一事无成
CreateNewsletter (This is the batch) -> NewsletterCreated
Accounts.Each(SendAccountNewsletter) -> AccountNewsletterSent
NewsletterCompleted (This is the batch) ->
Queue(command: CreateNewsletter, when: NextMondayAt9) (This is the next batch)
希望有帮助
p.S.如果你在公交车上发布滴答声,你将有大量噪音需要过滤