JMSComponent> transacted = true и transacted () в построителе верблюдов - PullRequest
0 голосов
/ 07 января 2019

Как transacted () в верблюжьей DSL связано с transacted = "true" JMSComponent. Будет ли это иметь смысл, если свойство transacted JMSComponent установлено в значение «true» вместе с transacted () в Camel DSL?

1 Ответ

0 голосов
/ 07 января 2019

transacted="true" в конфигурации компонента JMS делает транзакцию для вашего потребителя JMS. Так что это необходимо, если вы хотите убедиться, что вы не потеряете сообщения.

Однако у вас есть несколько вариантов включения транзакций (подробности см. В документах Camel ).

  1. Использовать локальные транзакции JMS
  2. Используйте свой собственный менеджер транзакций 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-транзакции , либо вам необходимо реализовать логику компенсации для обработки крайних случаев при использовании простых транзакций с каждым система вовлечена.

...