0

В последнее время я изучаю JMS API, и я не уверен, что понимаю различия между локальными и диспетчерами транзакций.JMS Локальные транзакции против TransactionManager

Сценарий 1:

Потребляйте сообщение от JMS брокера, обработать сообщение и совершать сделки, как только обработка завершается успешно в противном случае отката.

Сценарий 2:

Я хочу прокси-сообщения от одного брокера к другому брокеру, но я не хочу использовать XA транзакцию из-за его медленным характер. Таким образом, идея заключается в том, чтобы начать транзакцию для брокера, с которого я поглощаю, а затем в рамках этой транзакции запускает вторую транзакцию для брокера, который я производю, и затем совершу две транзакции подряд. Давайте проигнорируем проблему риска дублирования в этом сценарии, которая может быть уменьшена

В чем же разница между использованием API JMS commit(), rollback() (локальных транзакций Aka) и использованием диспетчера транзакций, такого как Spring's Класс PlatformTransactionManager? Обязателен ли менеджер транзакций во втором сценарии и почему так/нет?

+0

Как вы заявили, что «транзакции XA медленны по своей природе», мне может быть интересно, откуда вы взяли ваше заявление? – chalda

+0

Из моего собственного опыта, сравнивающего транзакции Non-XA и XA. Отчитываясь о том, сколько еще нужно выполнить транзакцию XA, чтобы синхронизировать N ресурсов, я полагаю, что это является причиной разницы в производительности. – ByteFlinger

+0

Спасибо за реакцию. Мой интерес вызвал ваш второй сценарий, поскольку у меня сложилось впечатление, что вы хотите имитировать транзакции XA без XA. Это означает, что вы не хотите использовать блокировку ресурсов? – chalda

ответ

1

Менеджеры транзакций будут следить за тем, чтобы транзакции, охватывающие серверы, собирались вместе или свертывались вместе.

Ручное управление отдельными транзакциями открывает отверстия, такие как транзакция сервера A, но сервер B не может быть из-за какого-либо количества ошибок (сеть, отказ приложения и т. Д.). Существует много сценариев, в которых менеджер транзакций смягчает проблемы.

Возможно, ваше приложение является идемпотентным и может обрабатывать одни и те же сообщения несколько раз и обрабатывать его правильно или что есть проблемы с потоками процессов, которые могут исправить ошибки, и в этом случае вы, вероятно, все в порядке.

Смежные вопросы