2015-08-24 3 views
3

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

В этом случае у нас есть JMS и DB. Мы хотим перехватить платежи и убедиться, что другой дубликат не находится в стадии разработки.

Должно ли это также означать, что чтение сообщения и запись, которое оно обрабатывается, должны быть завернуты в транзакцию XA?

Update:

Это http://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html?page=2 является наиболее актуальной. Я не читал более ценные советы. Есть ли обновленный код?

Должно ли быть полным XA с момента оплаты?

+0

Нет, вы хотите использовать XA, так как вы получаете доступ к нескольким ресурсам внутри транзакции. Вы хотите быть уверенным, что, если фиксация одного из ресурсов завершилась неудачно, все должны быть неудачными и откатываться – J2B

+0

Вы имеете в виду «Нет»? Я думаю, вы защищаете XA. Меня также интересовал пример интеграции Spring, в котором используются идеи статьи. Может ли другое сообщение и другое обновление БД продолжить, пока происходит первоначальное XA? –

ответ

0

Решение XA является самым простым для вас, поскольку вы имеете дело с платежами. Итак, достаточно получить менеджер транзакций JTA контейнера и ... Все должно работать нормально. Хотя вам может потребоваться настроить JMS и JDBC DataSources для XA, но может и не быть. Пожалуйста, обратитесь к этой статье доктора Сиера за дополнительной информацией.

С другой стороны, относительно вопроса о образце для этой статьи.

В этом случае нет такого большого сюрприза. Вы можете просто следовать требованиям org.springframework.data.transaction.ChainedTransactionManager и добавить JMS и JDBC-менеджеров транзакций в цепочку для правильной работы 1PC TX.

+0

Но 1PC достаточно для этого случая? Я думаю, вы имеете в виду, что даже если JMS откатывается, и БД совершает следующую параллельную транзакцию, может проверить БД? –