Amazon web services 如何防止重复的SQS消息?
在Amazon SQS中防止重复消息的最佳方法是什么?我有一个SQS的域名等待爬网。在我向SQS添加一个新域之前,我可以检查保存的数据,看看最近是否对其进行了爬网,以防止重复 问题在于尚未爬网的域。例如,如果队列中有1000个域尚未爬网。这些链接中的任何一个都可以一次又一次地添加。这将我的SQS扩展到数十万条消息,其中大部分是重复的 我如何防止这种情况?有没有办法从队列中删除所有重复项?或者,在添加消息之前,是否有方法在队列中搜索消息?我觉得这是任何拥有SQS的人都会遇到的问题Amazon web services 如何防止重复的SQS消息?,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,在Amazon SQS中防止重复消息的最佳方法是什么?我有一个SQS的域名等待爬网。在我向SQS添加一个新域之前,我可以检查保存的数据,看看最近是否对其进行了爬网,以防止重复 问题在于尚未爬网的域。例如,如果队列中有1000个域尚未爬网。这些链接中的任何一个都可以一次又一次地添加。这将我的SQS扩展到数十万条消息,其中大部分是重复的 我如何防止这种情况?有没有办法从队列中删除所有重复项?或者,在添加消息之前,是否有方法在队列中搜索消息?我觉得这是任何拥有SQS的人都会遇到的问题 我可以看到的一个
我可以看到的一个选项是,如果在将域添加到SQS之前存储一些数据。但是,如果我必须存储两次数据,那就有点破坏了首先使用SQS的意义。没有API级别的方法来防止重复消息发布到SQS队列。恐怕您需要在应用程序级别处理此问题
您可以使用DynamoDB表来存储等待爬网的域名,并仅在域名不在DynamoDB中时将其添加到队列中。正如前面提到的其他答案一样,您无法阻止来自SQS的重复消息 大多数情况下,您的信息会被传递给您的某个消费者一次,但在某个阶段,您会遇到重复的信息 我不认为这个问题有一个简单的答案,因为它需要一个合适的架构来处理重复,这意味着它本质上是幂等的 如果分布式体系结构中的所有worker都是幂等的,这将很容易,因为您不需要担心重复。但在现实中,这种环境并不存在,在这一过程中,某些东西将无法处理它 我目前正在进行一个项目,需要我解决这个问题,并提出一种处理方法。我想在这里分享我的想法可能对其他人有益。这可能是一个很好的地方,可以获得一些关于我想法的反馈 事实存储 开发服务是一个很好的主意,这样它们就可以收集事实,理论上可以在所有受影响的下游系统中重现相同的状态 例如,假设您正在为股票交易平台构建一个消息代理。(我以前确实做过这样一个项目,很糟糕,但也是一次很好的学习经历。) 现在让我们假设交易进入,有3个系统对此感兴趣:
var params = {
VisibilityTimeout: 20,
...
};
sqs.receiveMessage(params, function(err, data) {});