我使用1个会话,1个异步MessageListener来接收消息并在线程中处理每个消息。线程完成后,将使用会话提交或回滚来决定是否可以重新传递消息。但是我真的担心提交/回滚语句可能对线程中正在处理的那些消息有任何影响。例如
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?
您没有共享任何代码,但我会尝试回答。
首先,这似乎不是一个好策略,
会话提交或回滚将用于决定消息是否可以是否重新投递
我认为,您应该使用消息确认模式来决定是否重新发送。根据需要在讯息中设定适当的确认模式。
其次,您似乎将线程的存在与JMSSession
是否事务混合在一起。对于commit
或rollback
单个JMS消息,您的会话需要为单个JMS消息进行事务处理。 交易会话
所以我猜,你的commit
或rollback
的一个消息影响其他消息或不依赖于你的线程,但你如何定义一个事务和多少消息构成一个事务(即一个事务是如何作用域)。
是Session
commit
和rollback
而不是Message
commit
或rollback
。
希望有帮助!!