例如,考虑一个Web服务,用户可以在某个预定时间发出API请求来启动任务。任务定义和计划时间将保存在数据库中。 我想出的第一种方法是启动一个Go计时器并等待计时器在Goroutine中过期(而不是阻止请求)。这个goroutine在时间到期后还会触发另一个API请求来开始执行任务。如何从Web服务器重启(或代码刷新/升级)恢复Go定时器?
现在问题出现在重新部署此服务时。为了零宕机部署,我使用Einhorn和goji。代码重新加载后,显然定时器goroutine和定时器到期处理程序goroutine都会死亡。代码重新加载后有什么办法恢复Go计时器?
我正在努力的另一个问题是允许用户中断计时器(一旦它启动)。去定时器有Stop,以方便这一点。但是由于这是一个无状态的API,所以当\interrupt
请求进入服务时不具有定时器通道的上下文。并且它似乎不可能编组通道(从NewTimer返回)到磁盘/分区。
它也很有可能,我没有从正确的角度看待问题。任何建议将不胜感激。
我会使用外部任务队列服务来做到这一点,以保持与服务本身的隔离。 – 2014-10-10 11:50:45