Javascript 在Node.js中实现通知队列

Javascript 在Node.js中实现通知队列,javascript,node.js,redis,push-notification,Javascript,Node.js,Redis,Push Notification,背景:想象一下像Instagram这样的应用程序,你可以提交帖子,其他人也可以喜欢。只要有人喜欢你的帖子,你就会收到通知 要求:我们不应该每次有人喜欢你的某个帖子时都发送通知。我们应该明智地知道如何以及发送哪些通知 下面是一个例子: 假设你在晚上8:27发布了一篇帖子。我喜欢你的帖子。不到5秒钟,你的另一个朋友就喜欢上了同样的帖子。用户可以获得以下通知: 艾玛·沃森喜欢你的帖子 娜塔莉亚·戴尔喜欢你的帖子 然而,imageine在5秒钟内就有20个人喜欢这篇文章。因为我们不想用通知轰炸用户,所以

背景:想象一下像Instagram这样的应用程序,你可以提交帖子,其他人也可以喜欢。只要有人喜欢你的帖子,你就会收到通知

要求:我们不应该每次有人喜欢你的某个帖子时都发送通知。我们应该明智地知道如何以及发送哪些通知

下面是一个例子:

假设你在晚上8:27发布了一篇帖子。我喜欢你的帖子。不到5秒钟,你的另一个朋友就喜欢上了同样的帖子。用户可以获得以下通知:

  • 艾玛·沃森喜欢你的帖子
  • 娜塔莉亚·戴尔喜欢你的帖子
  • 然而,imageine在5秒钟内就有20个人喜欢这篇文章。因为我们不想用通知轰炸用户,所以我们应该巧妙地加入他们,并说:

  • Natalia Dyer和另外一个人喜欢你的帖子
  • 我们怎么做

    当点击“LIKE A POST”api时,我们如何发送通知,以及如何将通知合并成一个通知

    一个可能错误的解决方案:当该API被点击时,我们在redis中存储一个通知,该通知应该发送给用户

    然后,有一个reddit队列的消费者每五秒钟就会弹出一个消息

    如果我们在消费者提取之前收到通知,我们将删除redis缓存中以前的条目,并将其替换为新的通知

    然后,五秒钟后,如果没有其他女演员喜欢我们的帖子,我们会收到通知说:Natalia Dyer和另外一个人喜欢你的帖子

    让我知道这是否是一个合法和有效的解决方案。如果是,它是可伸缩的吗

    欢迎任何新想法/迭代,我期待它们。

    您可以使用创建具有batchDelay的队列并合并重复的任务

    在您的示例中,batchDelay为5秒,您可以构建taskId=postId+actionId

    postId唯一标识post,actionId类似于“likeAction”

    这样,在5秒钟的时间窗口中,相同帖子的所有类似通知都将具有相同的taskId,并将合并到单个任务中

    让我知道它是否适合你

    您可以使用创建具有batchDelay的队列并合并重复的任务

    在您的示例中,batchDelay为5秒,您可以构建taskId=postId+actionId

    postId唯一标识post,actionId类似于“likeAction”

    这样,在5秒钟的时间窗口中,相同帖子的所有类似通知都将具有相同的taskId,并将合并到单个任务中


    让我知道它是否适合你

    这是一个非常广泛的问题。你有没有试过的代码?堆栈溢出通常不属于咨询业务,因为这会导致固执己见的答案。@IronFlare不,只是一个想法。我有点期待有意见的答案。您会想到任何StackExchange社区,在那里我可以得到有用的评论和答案?对于特定目的,您不会想到任何东西,但是,如果您首先编写了上述代码的工作版本,则可以将该代码发布到,这将有助于推荐替代设计模式和更高效的解决方案。如果,当你在写代码的时候,你会被卡住,请随意把它贴在堆栈溢出上,因为我们的核心目的是帮助调试。这是一个非常广泛的问题。你有没有试过的代码?堆栈溢出通常不属于咨询业务,因为这会导致固执己见的答案。@IronFlare不,只是一个想法。我有点期待有意见的答案。您会想到任何StackExchange社区,在那里我可以得到有用的评论和答案?对于特定目的,您不会想到任何东西,但是,如果您首先编写了上述代码的工作版本,则可以将该代码发布到,这将有助于推荐替代设计模式和更高效的解决方案。如果,当您编写代码时,您会陷入困境,请随意在堆栈溢出上发布它,因为我们的核心目的是帮助调试。