我正在编写一个简单的通知服务。该服务提供了一种REST API,例如可以在其中放置通知
{
delayUntil: '2016-02-05T18:00:00'
user: 'username',
msg: 'Hello World',
isSent: false
}
现在,我想在时间延迟处向用户发送通知,直到要求服务即使重新启动也能正常工作,这意味着我必须保留该通知。现在,我正在使用BoltDB(键/值存储)。
解决此问题的一种方法是连续读取DB并在delayUntil过去时发送通知。
另一种方法是在服务启动时读取数据库,并将每个通知放入goroutine中,该例程将在delayUntil时间触发。发送消息后,在数据库中将其标记为“已发送”。进入API的新条目将插入数据库并进行调度。
有没有一种首选/更好/更简单的方法来实现这一目标?
编辑:只需一个实例。
最佳答案
如果您不想使用外部工具并且一个实例就足够了,则可以:
delayUntil
对列表进行排序,并获取下一个(最早)通知的时间t
。 t
,醒来,将所有通知发送到delayUntil >= t
自己的goroutine中,将其从列表和数据库中删除。 cron的工作原理大致如此。当然,您必须处理插入和其他特殊情况。看看https://github.com/robfig/cron/blob/master/cron.go开始。
关于go - Golang中的持久调度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35222853/