為什么要順序消費
保證訊息的順序消費是生產業務場景下經常面臨的挑戰,例如電商的下單邏輯,在用戶下單之后,會發送創建訂單和扣減庫存的訊息,我們需要保證扣減庫存在創建訂單之后執行,
- 處理業務邏輯后,向MQ發送一條訊息,再由消費者從 MQ 中獲取 訊息落盤到MySQL 中,
- 在這個程序中,可能會有增刪改的操作,比如執行順序是增加、修改、洗掉,
- 消費者可能換了順序給執行成洗掉、修改、增加,所以我們要保證訊息的順序消費
為什么會不按順序消費
對于 RabbitMQ 來說,導致上面順序錯亂的原因通常是消費者是集群部署,不同的消費者消費到了同一訂單的不同的訊息,
- 如消費者1執行了增加,消費者2執行了修改,消費者C執行了洗掉
- 但是消費者C執行比消費者B快,消費者B又比消費者A快,就會導致消費訊息的時候順序錯亂
- 本該順序是增加、修改、洗掉,變成了洗掉、修改、增加.

如何解決
RabbitMQ 的問題是由于不同的訊息都發送到了同一個 queue 中,多個消費者都消費同一個 queue 的訊息,
- 我們可以給 RabbitMQ 創建多個 queue,每個消費者固定消費一個 queue 的訊息,
- 生產者發送訊息的時候,同一個型別的訊息發送到同一個 queue 中
- 由于同一個 queue 的訊息是一定會保證有序的,那么同一個訂單號的訊息就只會被一個消費者順序消費,從而保證了訊息的順序性,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342142.html
標籤:其他
下一篇:Hbase工具類 V2.0.5
