Очереди FIFO Amazon SQS

Мы используем очереди AMAZON SQS FIFO для обработки службы бронирования встреч для нашего приложения. Как только сообщение попадает в очередь, оно запускает функцию Amazon Lambda для управления процессом бронирования. Поскольку это очередь FIFO, мы гарантируем, что если 2 человека запросят один и тот же слот, слот будет передан первому запрашивающему. Мой вопрос: есть ли способ (может быть, настройка в очередях SQS FIFO?), Который гарантирует, что одно сообщение не запускает функцию Amazon Lambda, пока предыдущее сообщение не будет ЗАВЕРШЕНО. Я просто пытаюсь избежать необходимости писать дополнительную логику (своего рода систему блокировки слотов), чтобы гарантировать, что один и тот же слот не будет нацелен на 2 последовательных сообщения до первого завершения процесса "бронирования" . Спасибо.

Но очереди FIFO не поддерживают триггеры лямбда-функции.

jarmod 08.11.2018 03:24

Поскольку jarmod говорит, что очереди FIFO не поддерживают лямбда, я предполагаю, что у вас есть лямбда-функция опроса? И вы упоминаете «очереди», а не «очередь» - сколько у вас очередей? У всех ли у них есть конкретная цель? Или любая очередь может нести какое-нибудь сообщение? IOW - 2 конфликтующих сообщения могут находиться в разных очередях друг к другу? Или они всегда будут в одной очереди?

Adam Benson 19.11.2018 13:45

Я думаю, что решение этой конкретной проблемы заключается не в блокировке сообщения SQS или его эквивалента, а в использовании атомарной блокировки или транзакций в вашей бизнес-логике / базе данных.

Charlie Schliesser 06.09.2019 19:50
Ноябрь 2019: AWS Lambda теперь поддерживает триггеры Lambda. См .: AWS Lambda поддерживает Amazon SQS FIFO (First-In-First-Out) в качестве источника событий
John Rotenstein 20.11.2019 02:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
1 197
1

Ответы 1

Вот как я решил проблему.

Я бы вообще не рекомендую использовать SQS, и вам не нужны никакие из этих функций, предлагаемых SQS для вашего варианта использования.

Перемещено из SQS в Kinesis Data Streams и установите размер пакета равным 1. для запуска лямбды. Это позаботится об этом. Потоки Kinesis - это FIFO. Также Кинезис очень хорошо масштабируется по сравнению с транзакционными очередями FIFO SQS.

Producer --> Kinesis Data Streams --> (Lambda Trigger [Batch Size to 1]) Lambda

Учитывая случаи ошибок,

Ошибка обработки:

Если ваша лямбда не работает при обработке данных потока, ваша контрольная точка будет продолжать повторять попытки с неограниченным количеством попыток. Вам нужно обязательно исправить свою лямбду и заставить ее двигаться вперед. Общее время повторных попыток равно общему времени, в течение которого вы настроили доступность данных в потоке.

Ошибка в Lamda:

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

Надеюсь, это поможет.

Спасибо. Вы предлагаете интересное решение. Единственная причина, по которой я не стал бы реализовывать это решение, заключается в том, что я стараюсь сделать его простым (для этого конкретного приложения).

Bas 09.11.2018 13:26

Используя очереди FIFO, вы уже усложнили задачу. Kinesis Data stream - самое простое решение.

Kannaiyan 09.11.2018 16:23

Kinesis намного дороже, чем SQS, поскольку вы платите за час сегментов.

andrhamm 26.03.2019 15:13

Другие вопросы по теме