首页 > 解决方案 > 使用带有 JTA @Transactional 的自定义拦截器 (quarkus-narayana-jta)

问题描述

我想找到一种方法来应用带有 JTA@Transactional注释的自定义拦截器。

我有一种方法,@Transactional它是一种业务交易。在那种方法中,我想:

  1. 做一些数据库操作
  2. 使用云消息服务发布一些主题。

如果两者中的任何一个失败,则两者都不应该完成(即它们应该回滚)。

目前我使用Google Cloud pubsub作为消息传递服务,但这个库似乎与 JMS 或 JTA 不兼容。因此,我想知道是否可以为该库实现自定义拦截器(例如,在事务期间排队消息,并在事务成功提交时发布排队消息)。

有什么好主意吗?

框架是 Quarkus,JTA 实现目前是 Narayana。

标签: javajmsjta

解决方案


不。JTA @Transactional 要求您的消息传递平台具有理想地支持 XA API 或至少某种形式的事务语义的事务管理器:begin()、commit() 和 rollback() - begin() 可能不是必需的,但是肯定 rollback() 是。

如果事务中的第二条消息出现问题,您要确保第一条消息“消失”,就好像它从未发生过一样,并回滚整个事务。

但是,到目前为止,Google pub/sub 没有事务、事务 ID 或 commit() 和 rollback() 的概念。


推荐阅读