繁体   English   中英

在rails中使用sidekiq,我如何向一群用户发送消息,每个用户都有自己想要接收消息的独特时间?

[英]Using sidekiq in rails, how can I send messages to a bunch of users, each of which has a unique time they want to receive it?

嘿,我有一个Rails应用程序和一堆用户,我想每天在用户选择的首选本地时间向他们发送一条消息。 (消息是文本,电子邮件或聊天机器人通知。)

我相信我可以在用户模型中添加一些内容,以允许在首选时间每24小时执行一次操作,但是我不确定具体如何实现,而且我也不知道如何从例如,如果用户更改了他们的首选时间,或者他们想一起禁用消息,则会排队。

关于如何执行此操作的任何想法?

您的应用程序托管在哪里? 您可以有一个cron任务或一个每小时(或每10分钟)运行的调度程序(Heroku)。 它将在用户首选项表中查询,以搜索此时(或此刻附近的范围内,例如接下来的10分钟)想要接收电子邮件的用户。

time = Time.now
@users = User.include(:settings).where(“settings.receive_email_at between ? and ?”, time, time + 10.minutes)

您可能需要进行一些更改以处理时区并避免发送重复的电子邮件,但这只是一个主意。

这很简单。 构建两个模型-一个模型用于存储用户及其时间映射( UserTimeMapping ),第二个模型用于在每天向用户发送消息( UserMessage )时创建唯一的条目。

编写一个cron任务,该任务每10分钟运行一次,并从UserTimeMapping提取所有要在接下来的10分钟执行的记录,并为确切时间安排一个worker任务(例如MessageTriggerWorker )。 工作者必​​须在UserMessage表中检查今天是否存在给定user_id的记录,如果是,则必须返回该记录而不执行任何任务。 如果不是这种情况,那么它应该发送消息并在UserMessage表中创建一条记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM