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

JMS transacted session: Commit / rollback for specific message

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

您还没有分享任何代码,但我会尽力回答。

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

session commit or rollback will be used to decide message can be redelivered or not

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

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

Transacted Session

所以我想,一条消息的 commitrollback 是否会影响其他消息并不取决于您的线程,而是取决于您如何定义交易以及有多少消息构成交易(即交易的范围)。

它是 Session commitrollback 而不是 Message commitrollback

希望对您有所帮助!!