我怎么知道Rabbitmq是否确认成功?
How can i know whether Rabbitmq acked success?
当我用RMQ设置了manual Ack,但是我怎么知道ack是否成功?如果在basic.ack之前有异常,当我有很长的操作要执行时,消息会发送到另一个消费者。我怎样才能避免这种情况?
How can i avoid that?
你不能。
在某些时候它会发生,您的代码需要优雅地处理这种情况。这通常是在消息处理中使用 idempotence 完成的。
也就是说,您允许消息被处理多次(因为它会发生),但您只对系统进行一次基础更改。
一种常见/简单的处理方法是为每条消息关联一个 ID。在处理消息之前,请检查该 ID 在您的数据库中是否标记为完整。如果不是,则处理消息。处理完消息后,您将使用该 ID 更新数据库。这样,当(不是如果)您 运行 进入消息被处理两次的场景时,您实际上不会进行两次处理/系统更改。
当我用RMQ设置了manual Ack,但是我怎么知道ack是否成功?如果在basic.ack之前有异常,当我有很长的操作要执行时,消息会发送到另一个消费者。我怎样才能避免这种情况?
How can i avoid that?
你不能。
在某些时候它会发生,您的代码需要优雅地处理这种情况。这通常是在消息处理中使用 idempotence 完成的。
也就是说,您允许消息被处理多次(因为它会发生),但您只对系统进行一次基础更改。
一种常见/简单的处理方法是为每条消息关联一个 ID。在处理消息之前,请检查该 ID 在您的数据库中是否标记为完整。如果不是,则处理消息。处理完消息后,您将使用该 ID 更新数据库。这样,当(不是如果)您 运行 进入消息被处理两次的场景时,您实际上不会进行两次处理/系统更改。