Amazon SQS stores copies of messages on multiple servers for redundancy and high availability.
我的案例:我已经将我的标准队列与lambda函数集成在一起 . 当有新消息进入队列时,将调用lambda函数 . 由于AWS Lambda将根据队列大小继续增加并发函数执行的数量,如果根据该队列大小为1000,则lambda函数的并发执行次数也将增加 . 在这种情况下,多个工作人员是否有可能通过一次从多个服务器接收来处理相同的消息副本?
我已经解决了这个问题:AWS: multiple instances reading SQS但是我没有找到将消息副本存储在多个服务器上的概念 .
3 回答
即使是Lambda函数的单个实例也可能会收到重复的消息 . SQS只做一次“尽最大努力”发送消息,但不作任何保证 . 如果您希望保证只传递一次消息,则需要使用SQS FIFO队列,但这些队列目前不支持Lambda触发器 .
某些代码接收相同消息的可能性来自于
ReceiveMessage
呼叫可能同时发生并且可能命中单独的SQS服务器的可能性 .虽然没有记录,但我怀疑从SQS队列(这是一个非常新的)触发Lambda函数的机制不会有这种行为,因为AWS负责触发Lambda,而不是调用SQS的外部进程 .
但是,没有任何文件可以确认是否可能发生 .
标准队列可以传递重复的消息 . 您发布的问题是每个人在使用jms或任何其他队列消息时遇到的标准消息队列问题 . 我们也有类似的情况,其中目标服务是ECS而不是lambda . 我们使用
unique identifier in database
来检查提交的状态,以验证消息是否由其他节点处理 .FIFO可能是解决问题的选择,但目前lambda函数不支持它 .