c# - 使用 ActiveMQ 的 Apache NMS:我如何使用事务确认模式但每次仍然确认/回滚单个消息?
问题描述
我使用 Apache NMS(在 c# 中)从 ActiveMQ 接收消息。我希望能够确认收到的每条消息,或者在出现错误时回滚消息。
我通过使用 CreateSession(AcknowledgementMode.IndividualAcknowledge) 解决了第一部分,然后对于每个收到的消息我使用 message.Acknowledge()。
问题是在这种模式下没有回滚选项。如果消息未得到确认 - 我将永远无法再次收到它以进行另一次试用。它只能发送给另一个消费者,但没有另一个消费者,所以它只是卡在队列中。
所以我尝试使用 AcknowledgementMode.Transactional 来代替,但是这里还有一个问题:我只能使用 session.Commit() 或 session.Rollback(),但是无法知道我提交了哪个特定消息或角色返回。
这样做的正确方法是什么?
解决方案
继续使用 INDIVIDUAL_ACKNOWLEDGE,然后尝试 session.recover() 和 session.close()。两者都应该向代理发出信号,表明消息不会被确认。
推荐阅读
- office-js - Office-js-helper
- clojure - Datomic - 动态查询函数
- c++ - Windows10 上的 VS Code + WSL 应用程序上的 CMake 扩展
- css - 如何自定义 Angular Flash 消息
- python - 如何从列表的每个元素都是元组的列表中获取元组的第 0 个索引处的最大值?
- ios - 在swift 3中按下MKPointAnnotation时如何调用函数
- arrays - 包含 4 个元素的数组的 for 循环不起作用
- android - AdMob 广告仅出现一次
- python - keras:返回 model.summary() vs scikit learn wrapper
- android - Android studio和gradle下载到硬盘块-acer revo build m1-601