0
當我使用RMQ設置手動Ack時,我怎麼知道ack是否成功完成?如果在basic.ack之前有一個異常,當我有很長的操作執行時,該消息將被髮送給另一個消費者。我避免這種情況?我如何知道Rabbitmq是否成功?
當我使用RMQ設置手動Ack時,我怎麼知道ack是否成功完成?如果在basic.ack之前有一個異常,當我有很長的操作執行時,該消息將被髮送給另一個消費者。我避免這種情況?我如何知道Rabbitmq是否成功?
我該如何避免這種情況?
你不行。
在某些時候它會發生,你的代碼需要優雅地處理這個場景。這通常在您的消息處理中使用idempotence完成。
也就是說,您允許消息被多次處理(因爲它會發生),但是您只能對系統進行一次底層更改。
處理此問題的常見/簡單方法是將每個消息都與一個ID相關聯。在處理消息之前,請檢查數據庫中該ID是否標記爲完整。如果不是,則處理該消息。處理消息時,使用該ID更新數據庫。這樣,當(如果)遇到消息被處理兩次的場景時,實際上不會進行兩次處理/系統更改。
你的具體問題是什麼?你使用什麼語言,平臺?你能展示一些代碼來證明你有問題嗎? – pinepain