延迟表单提交并仅提交最新的表单

时间:2018-01-17 22:03:08

标签: python amazon-web-services concurrency queue amazon-sqs

我制作了一个网页表单,在提交后会启动一个大型操作流程,可能会导致大量通知被发送给其他一些用户。

为了避免最终用户在短时间内多次批量提交,我想将这些操作排队(或什么?)并在一定延迟后,只实际提交最新条目

我目前正在使用AWS并使用SQS试验各种解决方案。不幸的是,我找不到一个好的解决方案。

当前解决方案

现在,我正在做以下事情,但我假设我使用了错误的工具:

用户首次提交:

  • 后端接收请求,查看亚马逊中是否存在临时队列 称为temp_queue_ [user' s id]
  • 如果为true,请删除此队列,然后使用a创建一个新队列 发送延迟10分钟,将此消息排入此
  • 如果为false,则与上面相同,只是不先删除队列

然后我有一个单独的进程,每10分钟重新加载一个队列列表,并实际提交他们找到的任何消息。

我已经尝试过其他方法,例如尝试不同的传递延迟,各种MessageGroupId等等,但我最终遇到了同样的问题,即一个消费者无法保证获得所有消息在飞行中,延迟和不可见的消息无法出列。

此外,我不能过滤"来自队列的消息,例如仅接收与特定用户相关的消息。所以我肯定开始认为队列是错误的工具。问题是,我不知道是什么。

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

很难理解你究竟想要完成什么,但我认为你应该让用户通过网络服务器提交到数据库,然后让你的定时进程查询该数据库以确保'有效&# 39;提交每隔这么多分钟处理一次。 SQL中的timestamp,max()和user / sessionId应该是唯一必需的元素。

如果您不想在运行自己的数据库服务器时下沉,可以在AWS,IBM Cloud等上提供一个托管数据库产品。

祝你好运。