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 与否混合在一起。要 commit
或 rollback
单个 JMS 消息,您的会话需要针对单个 JMS 消息进行处理。
所以我想,一条消息的 commit
或 rollback
是否会影响其他消息并不取决于您的线程,而是取决于您如何定义交易以及有多少消息构成交易(即交易的范围)。
它是 Session
commit
和 rollback
而不是 Message
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?
您还没有分享任何代码,但我会尽力回答。
首先,这似乎不是一个好策略,
session commit or rollback will be used to decide message can be redelivered or not
我认为,您应该使用消息确认方式来决定重新发送。根据需要在消息中设置适当的确认模式。
其次,您似乎将线程的存在与 JMS Session
transacted 与否混合在一起。要 commit
或 rollback
单个 JMS 消息,您的会话需要针对单个 JMS 消息进行处理。
所以我想,一条消息的 commit
或 rollback
是否会影响其他消息并不取决于您的线程,而是取决于您如何定义交易以及有多少消息构成交易(即交易的范围)。
它是 Session
commit
和 rollback
而不是 Message
commit
或 rollback
。
希望对您有所帮助!!