【问题标题】:Amazon SQS ReceiveMessage receiving duplicates?Amazon SQS ReceiveMessage 接收重复?
【发布时间】:2022-07-22 17:08:59
【问题描述】:

我有一个简单的 Golang 应用程序,它循环并接收来自 SQS 队列的消息。如果我向队列发送四条消息并调用 ReceiveMessage() 并将 MaxNumberOfMessages 设置为 1,则循环运行四次并接收四条消息。

由于某种原因,如果我将 MaxNumberOfMessages 更改为 10,我会在每个响应中收到 10 条消息(原来 4 条的重复都混在一起了),并且循环永远不会停止。 API 似乎永远向我发送 4 条消息。即使我正在删除它们,但每个实例的 ReceiptHandle 都是不同的。

为什么会这样?

// This loops seemingly forever and returns 10 messages (all duplicates) every time...
for {
  m, err := service.ReceiveMessage(&sqs.ReceiptMessageInput{
    MaxNumberOfMessages: aws.Int64(10),
    QueueUrl: &queueUrl,
    WaitTimeSeconds: aws.Int64(20),
  })

  for i := 0; i < len(m.Messages); i++ {
    service.DeleteMessage(&sqs.DeleteMessageInput{
      QueueUrl: &queueUrl,
      ReceiptHandle: m.Messages[i].ReceiptHandle,
    })
  }
}

【问题讨论】:

  • 消息可见性超时设置是多少?

标签: go amazon-sqs


【解决方案1】:

你能检查删除消息的错误吗?你不应该忽略错误。

 _, err := svc.DeleteMessage(&sqs.DeleteMessageInput{
    QueueUrl:      queueURL,
    ReceiptHandle: messageHandle,
})
// snippet-end:[sqs.go.delete_message.call]
if err != nil {
 fmt.Println(err)
}

另请参阅以下文档:

https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/sqs-example-receive-message.html

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2014-09-04
    • 2018-09-14
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多