我有一个JMS使用者,该使用者针对第三方服务处理事务。
当有异常调用此第三方服务时,例如java.net.ConnectException。我希望队列中重新发送此消息。
可以采用两种明显的方式进行重新投放。
回滚事务上下文:队列重新发送该消息,但JPA事务被回滚(但是,我希望db保留事务记录以防止出现重复消息)。
以重新交付的时间重新发送来自使用者的消息:保留事务上下文(记录保存在db中)。
将消息从使用者重新发送到队列中是否存在性能问题,而不是不确认消息?
答案 0 :(得分:1)
回滚更可靠。
您应该只为数据库更新启动一个新事务,而不是将其与JMS事务同步,因此即使JMS事务回滚,数据库事务也会提交。