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