天天看點

rabbitMQ如何保證消息順序消費和避免消息重複消費

一、如何保證消息的順序消費

思路就是拆分queue,使得一個queue隻對應一個消費者,這樣消費者一定是按照順序消費的;

如果消息數量較大,那我們可以按照消息類型拆分隊列,你管你消息再多,不可能所有消息都是需要順序性消費的吧,我們可以靈活一點,視情況而定,比如某三個消息ABC的對應的操作是需要順序消費的,那就把這三個放到同一個隊列;如果有多組這樣的ABC消息需要保證順序,那我們就多搞幾個隊列就哦了;不需要保證順序的消息就放在其它隊列;

二、如何避免消息的重複消費

這個要分情況

如果是direct模式:

一個隊列對應一個消費者,那不存在重複消費的問題;如果是一個隊列對應多個消費者,那消費者會通過輪詢來消費,也不會存在重複消費的問題;

如果是topic或者廣播模式:

一個隊列對應了多個消費者,且消費者會同時收到消息,那就會出現重複消費的問題,如果我們不希望出現重複消費,我們可以給消息加一個唯一id,存到redis裡面,消息消費成功後就存到redis裡面去,這裡我們可以用redis的set類型,然後每次消費之前先看看redis裡面有沒有該id;

ok我話講完

繼續閱讀