我正在尝试使用apache nms stomp来发送/接收消息。由于使用hornetq,我无法使用跨国ack模式。我的消费者场景:


收到讯息
处理消息
如果过程成功,则对其进行确认(带有message.Acknowledge())
如果处理失败,则拒绝它(????)


我只想要NACK如果处理失败的消息;那么我如何在Apache nms中否定一条消息?

最佳答案

我不知道您为什么不能通过HornetQ使用事务。当前使客户端发送NACK的唯一方法是使用事务并在发生错误时回滚事务。一旦达到配置的“最大允许的重新发送次数”,客户端将拒绝该消息。

在大多数实现中,如果您的客户端不确认消息然后断开连接,则该消息将重新传递给另一个客户端。对于ActiveMQ,您可以配置代理在将消息移入“死信队列”之前尝试尝试的最大次数。

就目前情况而言,当从异步消息回调中引发异常时,NMS.Stomp实现不会对消息进行NACK,但这可能是明智的增强,该项目确实接受了贡献。

关于c# - NACK消息在Apache NMS中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15926978/

10-17 02:00