考虑下面的粗略示例,其中spring按照标准spring引导设置管理事务。
使用springbootstarterdatajpa提供的默认事务管理器。
在这个事务性工作单元中,数据库和jms操作都会发生。
@Autowired JmsMessageOperations jmsMessageOperations;
@Autowired EntityManager entityManager;
@Transactional
public void doWork() {
entityManager.persist(new Foo(1));
entityManager.flush();
jmsMessageOperations.convertAndSend(BAR_QUEUE, new Bar(1));
entityManager.persist(new Foo(2));
entityManager.flush();
BazResponse bazResponse =
jmsMessageOperations.convertSendAndReceive(
BAZ_QUEUE,
new Baz(1),
BazResponse.class);
// here
}
如果在,这些jms消息(两个出站和一个入站)会发生什么 // here
答:
引发回滚异常,
发生某事(或什么都不发生),导致提交事务。
我特别感兴趣的是 convertSendAndReceive(...)
是受管理的,因为在提交发送之前显然无法接收响应—是的发送 Baz
在另一个事务中处理以发送 Bar
?
虽然我希望消息传递实现不会产生巨大的影响,但我主要对activemq感兴趣。
暂无答案!
目前还没有任何答案,快来回答吧!