amazon-web-services - 什么时候应该删除 SQS 中的消息?

标签 amazon-web-services amazon-sqs

我的申请包括:

  • 1 Amazon SQS 消息队列
  • n worker

  • worker 有以下逻辑:
     1. Wait for message from SQS queue
     2. Perform task described in message
     3. Delete the message from the SQS queue
     4. Go to (1)
    

    我希望每条消息只能由一名 worker 接收,以避免冗余工作。

    是否有使用 SQS 将消息标记为“进行中”的机制,以便其他轮询器不会收到它?

    或者,收到邮件后立即删除是否合适?
     1. Wait for message from SQS queue
     2. Delete the message from the SQS queue
     3. Perform task described in message
     4. Go to (1)
    

    如果我遵循这种方法,是否有办法恢复收到但未处理的消息,以防工作人员崩溃(步骤(3)失败)?

    This question是 Spring 特有的,它包含了各种魔法。

    最佳答案

    SQS 消息在消费者从队列中接收到但尚未从队列中删除后,就被认为是“进行中”的。这些消息对其他消费者不可见。
    在 SQS 消息传递中,如果出现以下情况,消息将被视为“飞行中”:

  • 你消费者收到了,
  • 可见性超时未过期且
  • 你没有删除它。

  • SQS 的设计使您可以调用 ReceiveMessage 并向您提供一条消息进行处理。您有一些时间(可见性超时)来处理此消息。在此“可见性”超时期间,如果您再次调用 ReceiveMessage,则不会返回您当前正在处理的消息。它是隐藏的。
    一旦可见性超时到期,消息将能够返回到 future 的 ReceiveMessage 调用。如果消费者以某种方式失败,则可能会发生这种情况。如果该过程成功,则您可以删除该消息。
    从 ReceiveMessage 调用中隐藏的消息数是“飞行中”数。目前,SQS 队列默认设置为允许最多 120,000 条消息“进行中”。
    http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

    关于amazon-web-services - 什么时候应该删除 SQS 中的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878490/

    相关文章:

    Hadoop 可以列出 s3 内容,但 spark-shell 抛出 ClassNotFoundException

    amazon-web-services - 是否需要 AWS SQS

    amazon-web-services - 以 SQS 队列为目标的 CloudWatch 事件无法正常工作

    ruby-on-rails - Rails 初始化程序中的两个线程无法正常工作

    amazon-web-services - 在cloudformation中使用Sub内部的Gett函数

    javascript - Axios:上传到 s3 在上传完成之前解析

    amazon-web-services - AWS Cloudformation 如何将日志从 CloudWatch Logs 发送到 S3

    linux - 如何绕过 Linux "Too Many Arguments"限制

    json - 属性 QueueConfigurations 的值必须是 List 类型

    amazon-web-services - AWS Codecommit Markdown 嵌入图片图像