Spring SqsListener 是否等到当前轮询中的最后一条消息被处理(或完成)后,才会发生下一次消息轮询?



我有一个最大消息计数为 10 的 SQS 侦听器。当我的使用者收到一批 10 条消息时,它们都会得到处理,但有时(取决于消息(该过程需要 5-6 小时,有些只需要 5 分钟。我有 3 个消费者(3 个不同的 JVM(从队列中轮询,最大消息计数为 10。这是我的问题:

如果这 10 条消息中的一条需要 5 个小时来处理,则侦听器似乎正在等待对 10 条消息进行下一次轮询,直到之前的所有消息都 100% 完成。有没有办法允许它轮询一批新的消息,即使另一批消息仍在处理中?

我猜我在这里错过了一些东西。我如何使用Spring Cloud库和SqsListener注释。以前有人遇到过这个吗?

另外,我认为这无关紧要,但队列是AWS SQS,并且JVM在ECS集群上运行。

如果在轮询器线程上运行任务,则在当前轮询完成之前不会进行下一次轮询。

您可以使用ExecutorChannelQueueChannel将工作移交给另一个线程(或多个线程(,但如果这样做,则可能会丢失消息。

您的情况相当不寻常;5小时处理一条消息的时间很长。

也许应该考虑重新设计应用程序,将这些"长时间运行"的请求保存到数据库或类似请求,而不是直接从消息中处理它们。或者,将它们放在不同的队列中,这样它们就不会影响较短的任务。

最新更新