我正在编写一个简单的通知服务 i Go。该服务提供了一个 REST api,可以在其中放置通知,例如{ delayUntil: '2016-02-05T18:00:00' user: 'username', msg: 'Hello World', isSent: false}现在我想在 delayUntil 时间向用户发送通知,要求服务即使重新启动也应该工作,这意味着我必须保留通知。现在我正在使用 BoltDB(键/值存储)。解决此问题的一种方法是持续读取数据库并在经过 delayUntil 时发送通知。另一种方法是在服务启动时读取数据库,并将每个通知放在一个 goroutine 中,该协程在 delayUntil 时间触发。消息发送后,它在 DB 中被标记为已发送。进入 API 的新条目被插入到数据库中并进行调度。有没有首选/更好/更简单的方法来实现这一目标?编辑:只需要一个实例。
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
如果您不想使用外部工具并且一个实例就足够了,您可以:
在服务启动时读取数据库并将所有挂起的通知放在列表中
对列表进行排序
delayUntil
并获取t
下一个(最早的)通知的时间。睡眠直到
t
,醒来,delayUntil >= t
在他们自己的 goroutine 中发送所有通知,从列表和数据库中删除它们。重复步骤 2。
这就是 cron 的工作原理。当然,您必须处理插入和其他特殊情况。看看https://github.com/robfig/cron/blob/master/cron.go开始吧。
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消