我有一个涉及发送JMS消息的流程。该过程是事务的一部分。如果事务的后续部分失败,即发送消息的前一部分之后的部分,我需要取消消息。我的一个想法是以某种方式设置消息,它在一定时间内不会被拾取,如果我需要回滚,那么我可以去取消消息。不知道消息传递,我不知道这个想法是否可行。或者,有没有更好的主意?谢谢
发布于 2009-02-06 18:13:35
您可以同时使用JMS和JTA (Java Transaction API)。这样做时,JMS消息的发送或接收消息的使用实际上是作为事务提交的一部分自动发生的。
这是什么意思?如果事务失败或被回滚,则“已发送”消息不会发出,任何“已接收”消息也不会真正使用。所有这些都由JMS和JTA提供程序为您处理。
您需要使用支持JTA的JMS实现。听起来你已经在使用事务了,所以可能需要做一些配置来实现它(有力地挥舞着手……)。
我有使用这个的经验(带WebLogic集成的BEA WebLogic 7)。按照宣传的那样工作--除非事务成功提交,否则“外部世界”看不到我尝试的JMS内容的任何影响。
它的早期版本通常链接到描述JMS/JTA集成的Java页面。页面变得陈旧了,我看不到类似的替代页面。此javadoc用于与此功能相关的JMS接口。
发布于 2009-02-16 20:35:21
您所描述的是一个XA事务。这允许事务跨越多个层,即JMS提供者、DB或任何其他EIS。大多数容器都可以配置为同时使用非XA事务和非XA事务,因此请检查容器设置!
例如,如果您正在将JMS与XA事务一起使用,则可能会出现以下情况。
Start Transaction
|
DB Insert
|
Send JMS Msg
|
More DB Inserts
|
Commit Transaction <- Only at this point will the database records be inserted and the JMS message sent.XA事务仅在完整的Java容器中可用,因此XA事务在Tomcat中不可用。
祝好运!
卡尔
https://stackoverflow.com/questions/517100
复制相似问题