【问题标题】:SQS Messages Not DeletingSQS 消息未删除
【发布时间】:2012-04-28 23:21:42
【问题描述】:

我在 SQS 队列中有一小部分消息,即使发送到 AWS 终端节点的删除请求返回 200 响应,这些消息也不会被删除。消息由我的应用程序很好地处理,删除请求也很好地发送。

我正在使用 Java AWS SDK 1.3.6。

有其他人遇到过这个问题吗?

【问题讨论】:

  • 这些 SQS 消息是完全没有删除还是只需要几秒钟?你能给我们看一些代码吗?
  • 嗨大安。它们从未被删除,或者至少在过去几个小时内没有被删除。我可以给你看一些代码,但这只是 AWS 开发工具包的常规使用,所以没什么意义!
  • 嗯,我从来没有遇到过这个问题。您可以从 AWS Web 管理控制台手动删除它们吗?这会影响您的所有 SQS 队列还是仅影响这个队列?如果您只有一个,您能否尝试创建一个新队列并查看相同的代码是否适用于从该队列中删除消息?我在 AWS 服务状态页面上没有看到任何问题,所以我认为 SQS 没有出现问题。不过也有可能。

标签: java amazon-web-services message-queue amazon-sqs


【解决方案1】:

如果您传递了异常,则很有可能您实际上并没有删除您的 sqs 消息,因此它会“在飞行中”卡住,因为您的处理过程中可能存在错误。尝试将您的 sqs 轮询包装起来,除了这样,看看您是否有任何异常:

import traceback
import sys

try:
    pollsqshere()
except Exception:
    print(traceback.format_exc())
    # or
    print(sys.exc_info()[2])

【讨论】:

    【解决方案2】:

    官方文档(1.9.13版)

    重要提示:您可能会收到一条消息,即使您在 已将其删除。如果以下情况之一,这可能会在极少数情况下发生 当您请求时,存储邮件副本的服务器不可用 删除消息。副本保留在服务器上,并且可能 在随后的接收请求中再次返回给您。你应该 创建您的系统是幂等的,以便接收特定的 多次发送消息不是问题。

    【讨论】:

    • 一种解决方案是延长可见性超时(最好以编程方式)。
    • 我认为这并不能真正“回答”这个问题,因为至关重要的是,引用的文档根本没有提到可见性超时,并暗示这是与服务器可用性有关的一些罕见情况.被询问的问题并不罕见或不太可能,似乎与服务器可用性没有任何关系,并且非常可靠,如果可见性超时为零,似乎 delete always 失败并错误成功(也许只是在可见性超时后发生删除的任何时候)。
    • 而引用文档中实际提出的解决方案(幂等性)并不能解决当消息实际上从未被删除时发生的实际问题 - 幂等处理不断重新传递的消息不会避免问题随着排队消息的数量不断增长,例如 SQS 使用的账单无限增长,并且一旦有足够多的旧消息仍未删除,则可能根本不会收到任何新消息。
    • 是的,它是有意的。
    【解决方案3】:

    糟糕 - 队列被意外设置为 defaultVisibilityTimeout=0。将其更改为正值可以解决问题。

    这仍然引发了一些问题:

    1. 为什么这只影响某些消息?也许有些需要更长的时间来处理?
    2. 为什么当邮件没有被删除时,亚马逊返回 200 来删除?
    3. 删除失败是因为它落在 0 秒窗口之外(在这种情况下,为什么 任何 删除请求会成功?),还是因为另一个消费者已被收到删除请求的时间?

    【讨论】:

    • 嗯。这很神秘。我也不知道这些问题的答案,但我很想知道是否有人知道。顺便说一句,感谢您分享解决方案!
    • 我现在正在使用 JavaScript SDK 遇到同样的事情。我的超时时间也为 0,但增加它并没有帮助。我也收到了成功消息,但只有当我通过 AWS 控制台删除时它才会起作用。任何人的任何更新?
    • @Daan 你能检查我的答案并确认是这样吗?谢谢!
    • 我在使用 PHP SDK 时遇到了同样的问题。将 defaultVisibilityTimeout 更改为不为零也为我修复了它。
    • 如果您为每个接收消息请求指定零可见性超时,而不是作为队列的默认设置,这似乎也会发生。假设:如果消息当前未处于可见性超时状态,则根本无法删除消息(删除总是错误地“成功”)。
    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2021-10-04
    相关资源
    最近更新 更多