Мы используем реактивные потоки Spring Cloud с RabbitMQ.
Появляется Spring Reactive Stream для подтверждения сообщения, как только оно вытягивает его из очереди. Таким образом, любые ошибки необработанных исключений, возникающие во время обработки сообщения, должны обрабатываться в приложении (которое отличается от нереактивного потока, где необработанные исключения могут быть выброшены и сообщение будет отклонено, отправив его, таким образом, в очередь недоставленных сообщений ).
Как мы должны иметь дело с внезапным завершением работы приложения, когда сообщение находится в полете?
Например:
- Приложение отключает сообщение очереди
- Приложение помечает сообщение как подтвержденное
- Приложение начинает обработку сообщения
- Приложение закрывается до завершения обработки сообщения
Когда это происходит сообщение кажется полностью потерянным, поскольку оно находится вне очереди, но приложение остановлено. Как мы можем восстановить эти сообщения?