我使用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?
答案 0 :(得分:0)
您尚未共享任何代码,但我会尝试回答。
首先,这似乎不是一个好策略,
会话提交或回滚将用于决定消息可以 是否重新传递
我认为,您应该使用消息确认模式来决定重新发送。根据需要在消息中设置适当的确认模式。
其次,您似乎混合了线程的存在与JMS Session
是否交易。要向commit
或rollback
单个JMS消息,您的会话需要针对单个JMS消息进行处理。
所以我想,一条消息的commit
或rollback
会影响其他消息与否取决于你的线程,但是你如何定义一个事务以及多少消息组成一个事务(即如何事务是作用域的)。
它是Session
commit
和rollback
而非Message
commit
或rollback
。
希望它有所帮助!!