0

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

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

这在编程上是可能的吗?

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

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

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

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

任何指针都会非常有帮助。

请多多包涵/AWS noob。谢谢。

4

2 回答 2

2

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

来自 AWS文档-

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

为了解决您的问题,我可以想到这种方法-

您拥有的当前设置 -

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)

于 2021-02-24T07:18:44.870 回答
0

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

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

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

在此处输入图像描述

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

我通过Lambda 教程观看了 YouTube 视频 AWS Step Functions | 使用 Lambda 配置 Step Functions的分步指南

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

于 2021-02-28T17:40:54.293 回答