一、如何保證消息的順序消費
思路就是拆分queue,使得一個queue隻對應一個消費者,這樣消費者一定是按照順序消費的;
如果消息數量較大,那我們可以按照消息類型拆分隊列,你管你消息再多,不可能所有消息都是需要順序性消費的吧,我們可以靈活一點,視情況而定,比如某三個消息ABC的對應的操作是需要順序消費的,那就把這三個放到同一個隊列;如果有多組這樣的ABC消息需要保證順序,那我們就多搞幾個隊列就哦了;不需要保證順序的消息就放在其它隊列;
二、如何避免消息的重複消費
這個要分情況
如果是direct模式:
一個隊列對應一個消費者,那不存在重複消費的問題;如果是一個隊列對應多個消費者,那消費者會通過輪詢來消費,也不會存在重複消費的問題;
如果是topic或者廣播模式:
一個隊列對應了多個消費者,且消費者會同時收到消息,那就會出現重複消費的問題,如果我們不希望出現重複消費,我們可以給消息加一個唯一id,存到redis裡面,消息消費成功後就存到redis裡面去,這裡我們可以用redis的set類型,然後每次消費之前先看看redis裡面有沒有該id;
ok我話講完