Управление транзакциями между 2 экземплярами ActiveMQ?

У меня есть отдельное приложение (простая строка командной строки), которая уже может читать или создавать сообщения из/в очереди ActiveMQ (без транзакции).

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

Я довольно много читаю по транзакциям, и, насколько я понимаю, потому что я переношу между двумя совершенно разными ActiveMQ, простой Spring JmsTransactionManager не будет достаточным, но необходимо какое-то управление распределенными транзакциями (например, транзакции XA),

Я полностью потерял на море примеры кода, найденные в Интернете относительно нескольких разных библиотек и т.д.

Может ли кто-нибудь указать мне способ найти простейшее решение этой проблемы? Должен ли я использовать JTA на вершине Spring как-то (можно ли даже использовать JTA в среде сервера приложений, отличной от j2ee)? Я уже использую Spring jmstemplate для отправки/получения сообщений, так что было бы здорово, если бы я мог использовать Spring (и, желательно, конфигурацию контекста xml, как я делаю все программно сегодня).

1 ответ

Если вам не нужна запись во второй удаленный ActiveMQ, который будет находиться в той же области транзакции, что и чтение, вы можете сделать это без распределенных транзакций. Вы можете открыть транзакцию чтения до тех пор, пока вы не добьетесь успеха во втором удаленном ActiveMQ. Как только это сработает, вы можете зафиксировать транзакцию чтения. Это означает, однако, что в случае сбоя после отправки, но до фиксации чтения вы в конечном итоге пересылаете сообщение. Таким образом, это предполагает, что дублированные отправки в порядке. Если вы не можете терпеть повторяющиеся отправки в случае сбоя, вы должны иметь распределенные транзакции.

licensed under cc by-sa 3.0 with attribution.