Может ли один опросник SQS обрабатывать несколько очередей SQS и расставлять приоритеты? - PullRequest
0 голосов
/ 30 января 2020

У меня есть сценарий использования, где у меня есть 2 очереди SQS, каждая из которых получает сообщения. Но условие состоит в том, что если я получаю сообщения в очереди FIRST, я прекращаю чтение сообщений из очереди SECOND и отдаю приоритет сообщению в очереди FIRST. Могу ли я справиться с этим, используя только один SQS-опросчик?

Постановка проблемы: Я часто получаю сообщения в ПЕРВОЙ очереди, но это важные сообщения. Но я постоянно продолжаю получать сообщения во ВТОРОЙ очереди. Таким образом, если обработчик обрабатывает сообщение из очереди ВТОРОЙ, и внезапно, если в очереди ПЕРВАЯ появляется новое сообщение, то после обработки сообщения из очереди ВТОРОЙ он должен перейти в очередь ПЕРВАЯ и начать принимать сообщения оттуда, пока первая очередь не станет пустой.

Есть ли решение для этого?

1 Ответ

0 голосов
/ 30 января 2020

Это хороший способ обработки приоритетных сообщений.

Если у вас есть только один потребитель (вы называете это "обработчиком") сообщений, тогда он должен:

  • Извлечение и обработка сообщений из очереди Приоритет
  • Если эта очередь пуста, то извлекать и обрабатывать сообщения из очереди Normal

Вы должны будете закодировать это поведение для своих потребителей. нет встроенной возможности для опроса из нескольких очередей.

Если у вас работает несколько потребителей , то вам может потребоваться каждые Потребитель делает вышеупомянутое, или вы можете назначить часть из них для обработки только из указанной c очереди. Например:

  • Некоторые потребители могут только опросить из Приоритетной очереди , используя длинный опрос, чтобы уменьшить количество вызовов, но ответить, как только сообщение появляется в очереди Приоритет
  • Другие потребители могут только опросить из Обычная очередь , чтобы гарантировать, что эти сообщения тоже получают внимание
  • Вы можете Отрегулируйте относительное число потребителей на основе типичных объемов данных

В качестве альтернативы, вы можете решить использовать AWS Лямбда-функции для обработки ваших сообщений . В этом случае очереди будут обрабатываться параллельно, но без приоритета одной очереди над другой. Единственный способ назначить приоритет в такой ситуации - это назначить различные значения параллелизма лямбда-функциям, используемым для каждой очереди. Это дало бы приоритетной очереди больше параллелизма в случае достижения пределов емкости.

...