У меня есть процесс, который включает отправку сообщения JMS. Этот процесс является частью транзакции. Если более поздняя часть транзакции завершилась с ошибкой, то часть, которая находится после предыдущей части, отправившей сообщение, мне нужно отменить сообщение. Одна мысль, которую я имел, заключалась в том, чтобы как-то настроить сообщение о том, что его не нужно забирать на определенное время, и если мне нужно откат, я мог бы пойти и отменить сообщение. Не зная сообщения, я не знаю, возможна ли идея. Или, есть ли лучшая идея? СпасибоJMS rollback
ответ
Вы можете использовать JMS и JTA (Java Transaction API) вместе - see here. При этом отправка сообщения JMS или потребление принятого сообщения на самом деле происходит атомарно как часть транзакционного фиксации.
Что это значит? Если транзакция завершается неудачей или откатывается, сообщение «отправлено» не выходит, и любые «принятые» сообщения на самом деле не потребляются. Все обрабатывается для вас поставщиком JMS и JTA.
Вам необходимо использовать реализацию JMS, которая поддерживает JTA. Похоже, что вы уже используете транзакции, поэтому может потребоваться сделать некоторую настройку, чтобы это произошло (энергично размахивая рукой ...).
У меня был опыт использования (BEA WebLogic 7 w/BEA WebLogic Integration). Работала так, как рекламировалась - «внешний мир» не видел влияния JMS, которое я пытался, если транзакция не была успешно выполнена.
То, что вы описали, является транзакцией XA. Это позволяет транзакции охватить несколько уровней, то есть JMS-провайдер, БД или любой другой EIS. Большинство контейнеров могут быть сконфигурированы для использования как не XA, так и никакой транзакции XA, поэтому проверьте настройки вашего контейнера!
Например, если вы используете JMS с транзакциями XA, возможно следующее.
Start Transaction
|
DB Insert
|
Send JMS Msg
|
More DB Inserts
|
Commit Transaction <- Only at this point will the database records be inserted and the JMS message sent.
XA Tranactions доступны только в полных контейнеров Java EE так XA транзакции не доступны в Tomcat.
Удачи вам!
Карл
- 1. JMS транзакционная сессия: Commit/rollback для конкретного сообщения
- 2. fail rollback in php artisan migrate: rollback
- 3. Rollback drawRect:
- 4. MbUnit Rollback
- 5. Базовая производительность DB2 COMMIT/ROLLBACK VS ROLLBACK TO SAVEPOINT
- 6. Весенняя транзакция rollback async?
- 7. GIT rollback master repo
- 8. JavaScript Promise.then rollback
- 9. C# Rollback sendemail
- 10. C# File Copy Rollback
- 11. <rollback> - Liquibase -
- 12. Redshift ROLLBACK для COPY
- 13. Приложение Rollback Visual Studio
- 14. Capistrano php/apache rollback
- 15. django non-rel rollback
- 16. Ab initio rollback
- 17. Symfony2 Doctrine MongoDB rollback
- 18. Сделка: commit() vs rollBack()
- 19. Devise Rollback on Registration
- 20. WCF TransactionScope не RollBack
- 21. Liquibase Auto Rollback
- 22. PDO rollback return FALSE
- 23. Улучшает ли производительность rollBack?
- 24. ROLLBACK undo redo
- 25. Тестирование @TransactionalEvents и @Rollback
- 26. UnitOfWork TransactionScope rollback
- 27. SharedPreferences commit and rollback
- 28. session withTransaction rollback issue
- 29. rollstrapper application rollback
- 30. RAISERROR AND ROLLBACK TRANSACTION
Также примите во внимание потери производительности: http://stackoverflow.com/questions/12305900/performance-overhead-of-xa-data-sources-best-practices – Vadzim