2015-11-05 265 views
0

当我使用RMQ设置手动Ack时,我怎么知道ack是否成功完成?如果在basic.ack之前有一个异常,当我有很长的操作执行时,该消息将被发送给另一个消费者。我避免这种情况?我如何知道Rabbitmq是否成功?

+0

你的具体问题是什么?你使用什么语言,平台?你能展示一些代码来证明你有问题吗? – pinepain

回答

0

我该如何避免这种情况?

你不行。

在某些时候它会发生,你的代码需要优雅地处理这个场景。这通常在您的消息处理中使用idempotence完成。

也就是说,您允许消息被多次处理(因为它会发生),但是您只能对系统进行一次底层更改。

处理此问题的常见/简单方法是将每个消息都与一个ID相关联。在处理消息之前,请检查数据库中该ID是否标记为完整。如果不是,则处理该消息。处理消息时,使用该ID更新数据库。这样,当(如果)遇到消息被处理两次的场景时,实际上不会进行两次处理/系统更改。

相关问题