JMS事务会话:特定消息的提交/回滚

时间:2016-06-26 04:24:44

标签: session jms commit rollback

我使用1个会话,1个异步MessageListener来接收消息并处理线程中的每个消息。线程完成后,将使用会话提交或回滚来决定是否可以重新传递消息。但我真的担心commit / rollback语句会对那些在线程中处理的消息产生任何影响。例如

1 session
1 msg listener

---TIME---->
[MSG1: receive] --------------- processing -----------------> [MSG1: rollback]
               [MSG2: receive] --------------> [MSG2: commit]


- At the time MSG2 commit, may be MSG1 also be committed?
If it is right, can I execute commit/rollback for specific MSG only?

1 个答案:

答案 0 :(得分:0)

您尚未共享任何代码,但我会尝试回答。

首先,这似乎不是一个好策略,

  

会话提交或回滚将用于决定消息可以   是否重新传递

我认为,您应该使用消息确认模式来决定重新发送。根据需要在消息中设置适当的确认模式。

其次,您似乎混合了线程的存在与JMS Session是否交易。要向commitrollback单个JMS消息,您的会话需要针对单个JMS消息进行处理。

Transacted Session

所以我想,一条消息的commitrollback会影响其他消息与否取决于你的线程,但是你如何定义一个事务以及多少消息组成一个事务(即如何事务是作用域的)。

它是Session commitrollback而非Message commitrollback

希望它有所帮助!!