【发布时间】:2020-10-02 15:15:17
【问题描述】:
我正在开发一项服务,在该服务中我侦听队列、反序列化收到的消息并将它们保存到数据库 (Oracle)。大致:
@JmsListener(destination="some-destination")
public void onMessage(Message message) throws Exception {
String message = ((TextMessage) message).getText();
service.save(deserialize(message));
// includes exception handling etc
}
在默认消息侦听器 bean 中,我设置了并发和setSessionTransacted(true)。这足以使整个 onMessage 事务处理吗?以便在一个事务中接收并保存消息,并在任何这些点出现故障时回滚?
当试图保存特定消息时,我尝试在特定消息上抛出异常 - 消息确实回滚到队列中,并且侦听器试图再次使用它们,这是一种理想的行为。
在研究这个的时候,我偶然发现了分布式事务,jta事务管理器,但是我仍然不确定除了setSessionTransacted(true)之外是否需要配置更多,或者Spring Boot是否自动处理XA资源的事务。
寻求建议。谢谢。
【问题讨论】:
标签: spring-boot jpa jms jta spring-boot-jpa