transacted="true"
в конфигурации компонента JMS делает транзакцию для вашего потребителя JMS. Так что это необходимо, если вы хотите убедиться, что вы не потеряете сообщения.
Однако у вас есть несколько вариантов включения транзакций (подробности см. В документах Camel ).
- Использовать локальные транзакции JMS
- Используйте свой собственный менеджер транзакций Spring
Camel DSL transacted()
необходим, только если вы выберете второй вариант, он ссылается на SpringTransactionPolicy
(например, PROPAGATION_REQUIRED
). Если он присутствует в вашем маршруте, Camel ищет диспетчер транзакций Spring для использования.
Если вы используете вариант 1 (что проще в конфигурации и идеально подходит, если вы общаетесь только с одним JMS-брокером), вам не нужен Camel DSL transacted()
, и ваши потребительские маршруты JMS, тем не менее, являются транзакционными.
Дополнение из-за комментариев
Чтобы использовать вариант 1, вам нужно только установить transacted="true"
и lazyCreateTransactionManager="false"
на вашем верблюде ActiveMQComponent
. Вы не должны настраивать диспетчер транзакций Spring (если вы это сделаете, вы получите два менеджера tx!)
Если вы хотите выполнять транзакции между несколькими JMS-брокерами или брокером и базой данных, вам потребуется либо XA-транзакции , либо вам необходимо реализовать логику компенсации для обработки крайних случаев при использовании простых транзакций с каждым система вовлечена.