Мои требования:
- При отправке сообщения в SQS:
- В случае сбоя (ошибка сети, ошибка AWS и т. д.) приложение должно повторить попытку X раз с помощью Задержка Y секунд.
- Если все повторные попытки завершаются неудачей, сообщение должно быть автоматически отправлено в другую очередь SQS, которая действует как DLQ.
- (Фаза 2) – Когда DLQ накапливает 10 сообщений, я хочу отправить уведомление по электронной почте о сообщениях, которые в данный момент находятся в DLQ.
Но это вторично; меня больше всего беспокоит логика повтора + DLQ в Spring Boot.
Я использую Spring Retry и имею что-то вроде:
Код: Выделить всё
@Retryable(
value = Exception.class,
maxAttempts = 4,
backoff = @Backoff(delay = 1000, multiplier = 2)
)
public void sendEventToOrderInformationQueue(OrderInformationDto dto, String groupId) {
sqsTemplate.send(...); // simplified
}
@Recover
public void recover(Exception ex, OrderInformationDto dto, String groupId) {
// send to DLQ
}
- Это рекомендуемый/идиоматический способ реализовать повтор + пересылку DLQ в Spring Boot?
- Должна ли логика повтора находиться внутри клиентского компонента SQS или она должна быть на отдельном уровне обслуживания?
- Является ли @Retryable правильным подходом для рабочих нагрузок или мне следует вместо этого использовать механизмы повторных попыток RetryTemplate / AWS SDK?
Как лучше всего реализовать:
- Повторить отправку сообщений SQS
- Переслать настраиваемый DLQ после неудачных попыток
- Будущее расширение для уведомлений DLQ
Подробнее здесь: https://stackoverflow.com/questions/798 ... nd-it-to-a
Мобильная версия