我们计划使用AWS SQS服务对从Web服务创建的事件进行排队,然后使用多个工作程序来处理这些事件。一个事件只能处理一次。根据AWS SQS文档,AWS SQS标准队列可以“偶尔”生成重复的消息,但吞吐量无限。 AWS SQS FIFO队列不会产生重复消息,但吞吐量限制为每秒300次API调用(batchSize = 10,相当于每秒3000条消息)。我们当前的高峰时段流量仅为每秒80条消息。因此,两者在吞吐量要求方面都很好。但是,当我开始使用AWS SQS FIFO队列时,我发现我需要做额外的工作,比如提供额外的参数 “MessageGroupId”和“MessageDeduplicationId”或需要启用“ContentBasedDeduplication”设置。所以,我不确定哪一个是更好的解决方案。我们只需要不重复的消息。我们不需要将消息作为FIFO。
解决方案#1: 使用AWS SQS FIFO队列。对于每条消息,需要为“MessageGroupId”和“MessageDeduplicationId”参数生成UUID。
解决方案#2: 使用启用了“ContentBasedDeduplcation”的AWS SQS FIFO队列。对于每条消息,需要为“MessageGroupId”生成UUID。
解决方案#3: 将AWS SQS标准队列与AWS ElasticCache(Redis或Memcached)一起使用。对于每条消息,“MessageId”字段将保存在缓存服务器中,稍后检查是否有重复。存在意味着此消息已被处理。 (顺便说一下,缓存服务器中存在“MessageId”多长时间.AWS SQS文档没有提到消息可以复制多久。)
答案 0 :(得分:0)
您的系统使SQS变得复杂。
我们已经搬到了Kinesis Streams,它完美无瑕。以下是我们看到的好处,
希望它有所帮助。
答案 1 :(得分:0)