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



我使用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?

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

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

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

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

其次,您似乎将线程的存在与JMS Session是否事务混合在一起。对于commitrollback单个JMS消息,您的会话需要为单个JMS消息进行事务处理。

交易会话

所以我猜,你的commitrollback的一个消息影响其他消息或不依赖于你的线程,但你如何定义一个事务和多少消息构成一个事务(即一个事务是如何作用域)。

Session commitrollback而不是Message commitrollback

希望有帮助!!

最新更新