RabbitMQ
RabbitMQ消息順序錯亂的場景:數據1、2、3按順序發到一個queue,多個消費者消費同一個queue
拆分為多個queue,每個queue由一個consumer消費;
或者就一個queue但是對應一個consumer,然后這個consumer內部用內存隊列做排隊,然后分發給底層不同的worker來處理
Kafka
1個topic,3個partition,3個consumer,每個消費者消費一個partition,需要保證順序的消息都放入同一個partiton,但是如果一個消費者開啟多個線程來處理,還是無法保證消息的順序性。
解決辦法:每個消費者內部設置多個內存隊列,對消息的key做hash,將需要保證順序的消息映射到同一個內存隊列中,每個線程負責處理一個內存隊列
轉自:中華石杉Java工程師面試突擊