在云环境中编写Messenger聊天机器人的背景下,我遇到了一些并发问题。
具体而言,我希望确保来自同一会话的传入邮件一个接一个地处理。
作为一种约束,我正在云环境中与工作人员一起处理消息(即工作池的大小可变,工作者实例可能是短暂的并且可能会崩溃)。此外,低延迟很重要。
抽象一点,我的要求是:
我的问题是:
答案 0 :(得分:1)
我不知道该方案的广泛接受的名称,但解决此类问题的常见策略是路由您的邮件,以便具有相同主题键的所有邮件最终都在同一目的地。有两种技术可以帮到您:
某些消息代理供应商将此要求称为消息分组,粘性会话或粘性消息负载平衡。
具有较弱交付/排序保证(如Amazon SQS)的邮件系统的另一个常见策略是在邮件中简单地包含一个序列号,并将其留到目的地以重新排序并根据需要请求重新发送丢失的邮件
答案 1 :(得分:0)
我认为你可以通过使用队列和集合来解决这个问题。我能想到的是在队列中发送每个消息对象并以先出先后的方式处理它。但是在队列中添加主题名称时,在集合中添加主题名称,并在将其删除以进行处理时从集合中删除主题名称。 所以现在如果你在set中有任何主题,那么不要在队列中添加同一主题的另一个消息对象。 我希望这能帮到您。一切顺利:)