java - 使用带有 JTA @Transactional 的自定义拦截器 (quarkus-narayana-jta)
问题描述
我想找到一种方法来应用带有 JTA@Transactional
注释的自定义拦截器。
我有一种方法,@Transactional
它是一种业务交易。在那种方法中,我想:
- 做一些数据库操作
- 使用云消息服务发布一些主题。
如果两者中的任何一个失败,则两者都不应该完成(即它们应该回滚)。
目前我使用Google Cloud pubsub作为消息传递服务,但这个库似乎与 JMS 或 JTA 不兼容。因此,我想知道是否可以为该库实现自定义拦截器(例如,在事务期间排队消息,并在事务成功提交时发布排队消息)。
有什么好主意吗?
框架是 Quarkus,JTA 实现目前是 Narayana。
解决方案
不。JTA @Transactional 要求您的消息传递平台具有理想地支持 XA API 或至少某种形式的事务语义的事务管理器:begin()、commit() 和 rollback() - begin() 可能不是必需的,但是肯定 rollback() 是。
如果事务中的第二条消息出现问题,您要确保第一条消息“消失”,就好像它从未发生过一样,并回滚整个事务。
但是,到目前为止,Google pub/sub 没有事务、事务 ID 或 commit() 和 rollback() 的概念。
推荐阅读
- loops - 如何访问飞镖循环之外的变量?
- swift - swift 5中选项之间的编辑器导航栏
- python - python list split 转换为 int 并添加
- java - Java 中是否存在包含所有其他数字类型的数字类型(原始类型或类)?
- python - 如何在 Django Rest Framework 中进行单元测试时模拟修补 Serializer.is_valid() 方法
- android - 将 RecyclerView A 中的 cardview 传递给 RecyclerView B
- python - Prophet 不适用于特定情况(normal_lpdf:位置参数 [1] 是 -nan(ind),但必须是有限的!)
- c# - 如何找出传递给父级的泛型类型
- python - 尝试使用 Selenium 从 Web 下载数据并出现奇怪的错误
- bootstrap-4 - Bootstrap 4.5 表 TR 后跟 TH