Транзакции ActiveMQ и XA с постоянными сообщениями, где адаптер персистентности jdbc использует не-xa источник данных jdbc - PullRequest
1 голос
/ 30 октября 2019

Я работаю над приложением, которое отправляет сообщения JMS и требует семантики доставки только один раз, код прослушивателя сообщений может взаимодействовать с несколькими базами данных и самим отправлять дальнейшие сообщения, поэтому я использую транзакции XA. У меня есть сеть брокеров сообщений ActiveMQ, хранилище постоянных сообщений с поддержкой JDBC, и я использую Bitronix для управления транзакциями. В настоящее время повторная доставка осуществляется брокерами, а не потребителями.

Приложение имеет несколько источников данных, некоторые из которых поддерживаются XA, а другие не являются XA. При просмотре конфигурации я заметил, что набор JdbcPersistenceAdapter, установленный в службе брокера, использует не-xa версию источника данных. Мой инстинкт заключается в том, что эта конфигурация неверна и что адаптер персистентности должен использовать источник данных XA. Однако в настоящий момент все работает правильно с точки зрения отката / фиксации / повторной доставки сообщений в семантике транзакций.

Я пытаюсь убедиться, правильно ли я считаю, что мне нужно изменить источник данных наXA версия? Если я прав, думая, что это нужно изменить, мне также было бы интересно узнать, почему это работает правильно, хотя это, очевидно, менее важно, чем правильная конфигурация)?

1 Ответ

0 голосов
/ 30 октября 2019

Когда клиент JMS использует транзакции XA с ActiveMQ, клиент ActiveMQ предоставляет javax.transaction.xa.XAResource, а менеджер ресурсов, с которым работает менеджер транзакций, реализуется самим посредником. Неважно (или необходимо), является ли базовый источник данных JDBC, используемый брокером, реализующим XA.

Другими словами, с вашей текущей конфигурацией все в порядке.

...