Мы внедрили приложение с управляемой событиями архитектурой, которое имеет около 7 пружинных микросервисов. Как часть счастливого потока, эти микросервисы прослушивают AWS SQS (предположим, app_queue), который подписан на AWS SNS topi c (предположим, app_topi c).
Для сценария исключений ios мы реализовали что-то вроде ниже:
- Категоризовали исключения как 500 (ошибки на сервере int) и ошибки категории 400 (плохое требование)
- В обоих этих сценариях ios мы сбрасывают сообщение в SNS topi c с именем status_topi c. SQS с именем status_queue подписан на этот топи c. Мы сделали это, имея в виду, что, как только законченная разработка приложений будет завершена для счастливого сценария ios, мы будем обрабатывать сообщения в status_queue таким образом, чтобы команда поддержки производства могла исправить как 500, так и 400 ошибки. ТАК в основном: app_topi c -> app_queue -> Ошибка микросервиса -> status_topi c -> status_sqs
Требуются некоторые экспертные рекомендации по приведенному ниже подходу, если возникнут какие-либо проблемы :
- Задание cron k8s (Spring boot microservice) будет запускаться каждую ночь для обработки сообщений об ошибках из вышеупомянутого status_queue и обрабатывать только 500 ошибок сервера int FOR RETRY.
- Задание cron отправит sh сообщения обратно в обычное приложение SNS app_topi c, которое перезапустит сообщение, и нормальный бизнес-поток продолжится. Является ли вышеуказанный подход приемлемым ??
Я знаю, что DLQ больше подходят для такого сценария ios, но могу ли я отправить сообщение в DLQ непосредственно из моего java кода приложения?
Независимо от того, какой подход мы используем, существует ли способ автоматического воспроизведения сообщений из определенной c очереди (нормальной и dlq), поэтому нам не нужно писать отдельный микросервис для воспроизведения сообщений?