当前位置: 首页 > 知识库问答 >
问题:

如何处理涉及Spring消息/JMS和数据库的事务

戈安翔
2023-03-14

我有一个获取发票的方法,它创建XML并将该XML发送到JMS队列,然后将发票保存到DB,更新状态为“invoinced”。下面是涉及Spring和Hibernate的伪代码。我的问题是:hibernate save rollsback Jms发送失败。或者,如果JMS发送失败,我如何回滚保存发票状态?这属于分布式事务管理。这里涉及哪些交易案例。谢谢

 @Transactional(propagation=Propagation.Required)    
 void processInvoices(invoice ){
           String xml = createXML(invoice);
           messageService.sendInvoice(xml );
           invoice.setStatus("invoiced");
           save(invoice);

  }

共有1个答案

卫琛
2023-03-14

根据我的知识以及我从您的问题中了解到的情况,您希望同步hibernate和JMS事务,为此,您需要使用JTA跨hibernate和JMS管理事务

阅读更多@Spring同步Hibernate和JMS事务

 类似资料:
  • Spring Kafka和Spring Cloud Stream允许我们创建事务生产者和处理器。我们可以在其中一个示例项目中看到该功能的实际应用:https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/transaction-kafka-samples: 在这个摘录中,有来自Kafka主题的读取、数据库中的写入

  • 我可以在solace JMS队列中搜索任何特定的消息,然后在其他消息之前处理吗?我们有这样的功能w. r. t慰藉队列。

  • 应用程序有一个JMS队列负责交付审计日志。应用程序将日志发送到JMS队列,该队列由MDB使用。 但是,发送的消息是大 XML 文件,大小从 20 MB 到 100 MB 不等。问题在于 JMS 队列使用消息的时间太长,从而导致内存不足错误。 我应该怎么做才能解决这个问题?

  • Spring Boot上有一个应用程序,它把它的jms请求放在一个队列中,然后从另一个队列中获取答案。还有一个应用程序正在处理响应队列。请求~每秒100次。实际上,问题是如何处理它们并选择我需要的?现在我使用@JmsListener读取队列中的所有消息,但是那些不适合我的应用程序的消息被绘制出来。创建一个线程并分别等待答案,在我看来,这似乎不是一个好主意,因为可以有几千个线程。如何成为?

  • 1、Db.tx 事务 在 Db 工具类里面,提供了一个系列的 tx(...) 方法支持数据库事务,以下是 Java 8 的 lambda 语法使用示例: Db.tx(() -> { Db.update("update t1 set f1 = ?", 123); Db.update("update t2 set f2 = ?", 456); return true; }); 以上代码中的

  • 我制作了一个POC,其中包含Spring-boot-starter-data-jpa和Spring-boot-starter-active emq。当提交jpa事务时,我想在代理(activeMQ)上推送jms消息。 我的代码: UtilsateurService具有"主"事务: “管理”Jms消息的SendMessage类: 我的主要班级: 在抛出异常之前,JMS消息被推送到activeMq代理