0

我有一个用例,我有 2 个 SQS 队列,每个队列都在获取消息。但条件是如果我在 FIRST 队列中获取消息,我将停止从 SECOND 队列读取消息并优先考虑 FIRST 队列消息。我可以只使用一个 SQS 轮询器来处理这个问题吗?

问题陈述:我经常在 FIRST 队列中收到消息,但这些消息很重要。但我不断地在 SECOND 队列中获取消息。所以,如果 poller 正在处理 SECOND 队列的消息,并且突然在 FIRST 队列中出现新消息,那么在处理完 SECOND 队列的消息后,它应该跳转到 FIRST 队列并开始取从那里开始的消息,直到第一个队列为空。

有解决办法吗?

4

1 回答 1

0

这是处理优先级消息的好方法。

如果您只有一个消息消费者(您称其为“轮询器”),那么它应该:

  • 从优先级队列中检索和处理消息
  • 如果该队列为空,则从正常队列中检索和处理消息

您需要将此行为编码到您的消费者中。没有从多个队列轮询的内置功能。

如果您正在运行多个消费者,那么您可能希望让每个消费者都执行上述操作,或者您可以将其中的一部分分配给仅来自特定队列的处理。例如:

  • 一些消费者只能优先队列中轮询,使用长轮询来减少调用次数,但只要消息出现在优先队列中就会响应
  • 其他消费者只能普通队列中轮询,以确保这些消息也受到关注
  • 您可以根据典型数据量调整消费者的相对数量

或者,您可以决定使用 AWS Lambda 函数来处理您的消息。在这种情况下,队列将被并行处理,但不会赋予一个队列高于另一个队列的优先级。在这种情况下分配优先级的唯一方法是为每个队列使用的 Lambda 函数分配不同的并发值。如果达到容量限制,这将使优先级队列具有更多的并发性。

于 2020-01-30T02:33:20.663 回答