首页 > 解决方案 > 使用 ActiveMQ 的 Apache NMS:我如何使用事务确认模式但每次仍然确认/回滚单个消息?

问题描述

我使用 Apache NMS(在 c# 中)从 ActiveMQ 接收消息。我希望能够确认收到的每条消息,或者在出现错误时回滚消息。

我通过使用 CreateSession(AcknowledgementMode.IndividualAcknowledge) 解决了第一部分,然后对于每个收到的消息我使用 message.Acknowledge()。

问题是在这种模式下没有回滚选项。如果消息未得到确认 - 我将永远无法再次收到它以进行另一次试用。它只能发送给另一个消费者,但没有另一个消费者,所以它只是卡在队列中。

所以我尝试使用 AcknowledgementMode.Transactional 来代替,但是这里还有一个问题:我只能使用 session.Commit() 或 session.Rollback(),但是无法知道我提交了哪个特定消息或角色返回。

这样做的正确方法是什么?

标签: c#transactionsactivemqapache-nms

解决方案


继续使用 INDIVIDUAL_ACKNOWLEDGE,然后尝试 session.recover() 和 session.close()。两者都应该向代理发出信号,表明消息不会被确认。


推荐阅读