У меня есть очередь ActiveMQ Artemis, из которой я читаю и выполняю некоторую обработку и запись в базу данных. Сообщения очереди очень важны, и я не могу позволить себе терять сообщения.
Моя обработка:
Очередь чтения (большая партия) -> Процесс -> Запись в базу данных (транзакция)
Моя проблема заключается в том, что произойдет, если моя служба выйдет из строя во время Фаза «Процесс». Поскольку я прочитал сообщения (используя Spring JMS), я потеряю этот пакет (даже если я использую client_ack - Spring получит подтверждение после того, как прочитает сообщения). Есть ли способ избежать этого?
Мое решение состоит в том, чтобы использовать JMS-транзакции и записывать в пакет различные топики c, как показано ниже.
Очередь чтения -> Запись в некоторые топи c -> зафиксировать транзакцию JMS -> процесс -> запись в базу данных (транзакция)
Это хороший шаблон? Какую альтернативу я могу использовать?