Я пытаюсь повторить неудачные транзакции.Для этого то, что мы сделали Один из моих EAR пытается запросить у третьей стороны, если это не удалось, он записывает все транзакции в файл (в CSV-файле запятая разделяла каждый запрос).Пример: сбой запроса на мыло 1, сбой запроса мыла 2,
Мой другой EAR выполняет планировщик и выполняет чтение всех транзакций.
Если мой файл находится в режиме чтения или записи,это не продолжается в тот момент.Это будет продолжаться, если только он не находится в режиме чтения или записи.Для этого мы меняем имя файла, добавляя _locked
.Таким образом, если записывающий поток видит заблокированный файл, он создает новый файл для записи и чтения, процесс пропускает этот файл.
Во время чтения мы помещаем все неудачные транзакции в JMS
Очередь, и потребитель снова отправляет запрос третьей стороне для каждогозапрос.Успешная и неудачная транзакция Я должен записать в другой каталог, чтобы ошибочные транзакции можно было проверить вручную (для возврата).
Вопрос: 1).Мне было интересно, что, если мой сервер выходит из строя, и я не получил ответ от третьей стороны.Таким образом, начиная с ActiveMQ
, мой объект транзакции уже потребляется из очереди, но при дальнейшей обработке он теряется.Можно ли вручную подтвердить ActiveMQ
после получения ответа.Но я думаю, что это замедлило бы обработку моего запроса на большое количество запросов.
2) Что делать, если мне придется повторить 3 раза для каждого запроса.Итак, что у меня на уме, я обработал бы каждый файл для неудавшегося запроса, который я записал бы в другой файл в каталоге с именем RETRIED_ONCE .
Я должен пройти снова, если нет папки для RETRIED_TWICE для неудачной транзакции в RETRIED_ONCE.Я хотел бы создать и записать файл CSV в эту папку.Если какая-либо транзакция, которая повторяется в RETRIED_TWICE , попадет в папку с ошибками, и эти транзакции будут просмотрены вручную.
Каждый час мой планировщик сканировал эти три папки и соответственно записывал неудачную транзакцию.
Есть ли лучший способ, чем этот?
Или я должен создать две JMS
очереди для RETRIED_ONCE и RETRIED_TWICE .