【问题标题】:Delete a SQS message in the 'stored' state删除处于“已存储”状态的 SQS 消息
【发布时间】:2021-02-24 06:31:28
【问题描述】:

我有一个用例,我必须将消息对消费者的可见性延迟大约 15 分钟,但如果在 15 分钟内发生事件变化;我应该取消消息,以便状态在那里结束。

我看到 Amazon SQS 消息计时器适用于这种情况,但我无法满足第二部分的要求。

这可以通过编程方式实现吗?

在文档https://docs.amazonaws.cn/en_us/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html 中提到,Amazon SQS 消息具有三种基本状态:

  1. 由生产者发送到队列。
  2. a 从队列中接收到
  3. 消费者。已从队列中删除。
  • 消息被生产者发送到队列后,但消费者尚未从队列中接收到消息(即在状态 1 和 2 之间),即被视为已存储。
  • 消息被消费者从队列中接收到,但尚未从队列中删除(即在状态 2 和 3 之间)后,该消息被视为处于传输状态。

我知道消息在被消费后可以删除,但我如何在消费者可见之前删除或过期?

我可以使用其他任何 AWS 服务吗?查看步骤函数,但不完全适合上面提到的这个简单用例。

任何指针都会很有帮助。

请多多包涵/AWS 菜鸟。谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-sqs amazon-sns amazon-api-gateway


    【解决方案1】:

    不接收消息就从 SQS 队列中删除消息是不可能的。

    来自 AWS Docs -

    要删除消息,您必须发送一个单独的请求,确认您已成功接收并处理了该消息。请注意,您必须先收到一条消息,然后才能将其删除。

    为了解决你的问题,我可以考虑这种方法-

    您拥有的当前设置 -

    1. Send message to SQS Q1
    2. Delay of 15 minutes.
    3. Message received by all subscribers of Q1 (say S1, S2, S3).
    

    修改设置

    1. Send Message to SQS Q1.
    2. Delay of 15 minutes.
    3. Message received by a new Subscriber (say Sx) of SQS Q1.
    4. Subscriber checks the event details and decides whether or not to cancel the event.
    5. If event is to be cancelled, delete it.
    6. Else, send it to the DLQ of Q1 (Say Q2). More info on DLQs here - https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html.
    7. Q2 can now have the previous set of Subscribers (S1, S2, S3)
    
    

    【讨论】:

    • Sarthak - 感谢您的回答。我相信 Step Functions 在这种情况下是一种更好的方法。谢谢
    【解决方案2】:

    我可以使用其他任何 AWS 服务吗?看阶跃函数 但不完全适合上面提到的这个简单用例。

    回答我自己的问题,因为在这种用例中可以使用其他 AWS 服务:

    我现在使用 AWS Step Functions 来延迟发送到 SNS 的消息。

    我有一个订阅 SNS 的 Lambda 函数,该函数在设定的时间后触发。

    我观看了 YouTube 视频 AWS Step Functions with Lambda Tutorial | Step by Step Guide,了解如何使用 Lambda 配置 Step Functions。

    我希望它对有类似用例的人有用,而不是试图解决 SQS 的限制。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多