我使用Apache NMS(在c#中)从ActiveMQ接收消息。 我希望能够确认收到的每条消息,或者在出现错误时回退消息。
我通过使用CreateSession(AcknowledgementMode.IndividualAcknowledge)解决了第一部分,然后对于每个收到的消息,我都使用message.Acknowledge()。
问题在于,在此模式下没有回滚选项。如果消息未被确认-我将再也无法收到它进行另一次试用。只能将其发送给其他使用者,但是没有其他使用者,因此它只是停留在队列中。
所以我尝试改用AcknowledgementMode.Transactional,但是这里还有另一个问题:我只能使用session.Commit()或session.Rollback(),但是无法知道我提交或扮演的是哪个特定消息回来。
正确的方法是什么?
答案 0 :(得分:0)
使用INDIVIDUAL_ACKNOWLEDGE,然后尝试session.recover()和session.close()。两者都应向代理发出信号,通知消息将不被确认。