2013-12-12 4 views
4

В нашем новом проекте мы хотели бы достичь сделок, которые связаны с JPA (MySQL) и шина сообщений (RabbitMQ)XA транзакция и шина сообщений

Мы начали строить инфраструктуру с весенними данными, используя MySQL и RabbitMQ (через пружину amqp). Поскольку rabbitMq не является XA-транзакцией, мы сконфигурировали neo4j chainedTransactionManager в качестве нашего основного оператора транзакций. Этот менеджер принимает в качестве аргумента jpa txManager и rabbitTransactionManager.

Теперь я получаю возможность аннотировать службу с помощью @Transacitonal и использовать внутри нее jpa и кролик. Если я выдаю исключение, то в действительности не происходит никаких действий.

Вот мои вопросы:

  1. Является ли эта конфигурация действительно дает мне атомную сделку?
  2. Я слышал, что управляемый tx-менеджер не использует 2-фазную фиксацию, а «лучшее усилие», это лучшее усилие менее надежное? если да, то как?

ответ

3

Что такое ChainedTransactionManager, это в основном запуск и совершение транзакций в обратном порядке. Поэтому, если у вас есть JpaTransactionManager и RabbitTransactionManager и настроены так.

@Bean 
public PlatformTransactionManager transactionManager() { 
    return new ChainedTransactionManager(rabbitTransactionManager(), jpaTransactionManager()); 
} 

Теперь, если тх JPA совершить успешно, но ваш совершить RabbitMQ не удается ваши изменения базы данных будут по-прежнему сохраняться, как те, которые уже совершенны.

Чтобы ответить на ваш первый вопрос, он не даст вам настоящую атомную транзакцию, все, что было совершено до появления Exception (при совершении), останется в силе.

См http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/transaction/ChainedTransactionManager.html

+0

Можно ли достичь одной транзакции с обеими источниками данных отката на провал одного из них? – Urbanleg

+0

Нет ... Конец постоянный. Единственный способ обойти это - сделать компенсационную транзакцию (т. Е. Отслеживать изменения самостоятельно и вручную откат). –

+0

Что относительно jta? без прикованного менеджера и без кролика.? (т. е. с активным mq вместо?) – Urbanleg

Смежные вопросы