我正在开发一项服务,在该服务中我侦听队列、反序列化收到的消息并将它们保存到数据库 (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资源的事务。寻求建议。谢谢你。