我想知道标记为@Transactional的Spring Boot方法何时应该在队列中显示一条消息?我问是因为我注意到2个不同的应用程序有2个不同的行为。
这两个应用程序具有以下共同点:
这两个应用程序之间的主要区别是:
观察到的行为的差异是,当存在JPA源时,将在方法末尾发送消息。没有它,消息将立即发送。
这是预期的行为吗?
我可以配置应用程序使其行为相同吗?理想情况下,我希望在最后发送消息(因此,任何失败的Mongo更改都会取消消息发送并回滚所做的任何JPA更改)?我意识到Mongo更改不属于任何创建的交易。
谢谢
答案 0 :(得分:0)
使用JMS和数据库,您必须获得资源。
要拥有完整的交易行为,您需要分布式交易支持。
如果即使最后一次发送消息时也没有此功能,但发送失败,无论如何数据库中的数据都会更改。
要配置分布式事务,您需要JTA。此处描述:
使用JMS和数据库,您必须获得资源。要拥有完整的交易行为,您需要分布式交易。我们在应用程序中使用了Bistronix,效果很好。
看看文档:{{3}}