使用ActiveMQ的Apache NMS:如何使用事务确认模式,但每次仍然确认/回退一条消息?

时间:2019-02-25 08:33:06

标签: c# transactions activemq apache-nms

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

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

问题在于,在此模式下没有回滚选项。如果消息未被确认-我将再也无法收到它进行另一次试用。只能将其发送给其他使用者,但是没有其他使用者,因此它只是停留在队列中。

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

正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

使用INDIVIDUAL_ACKNOWLEDGE,然后尝试session.recover()和session.close()。两者都应向代理发出信号,通知消息将不被确认。