Обработка ошибок в сообщении JMS - PullRequest
0 голосов
/ 06 марта 2020

У меня есть очередь ActiveMQ Artemis, из которой я читаю и выполняю некоторую обработку и запись в базу данных. Сообщения очереди очень важны, и я не могу позволить себе терять сообщения.

Моя обработка:

Очередь чтения (большая партия) -> Процесс -> Запись в базу данных (транзакция)

Моя проблема заключается в том, что произойдет, если моя служба выйдет из строя во время Фаза «Процесс». Поскольку я прочитал сообщения (используя Spring JMS), я потеряю этот пакет (даже если я использую client_ack - Spring получит подтверждение после того, как прочитает сообщения). Есть ли способ избежать этого?

Мое решение состоит в том, чтобы использовать JMS-транзакции и записывать в пакет различные топики c, как показано ниже.

Очередь чтения -> Запись в некоторые топи c -> зафиксировать транзакцию JMS -> процесс -> запись в базу данных (транзакция)

Это хороший шаблон? Какую альтернативу я могу использовать?

...