當我們的系統中引入了mq之後,不得不考慮的乙個問題是如何保證訊息的順序性,這是乙個至關重要的事情,如果順序錯亂了,就會導致資料的不一致。
比如:業務場景是這樣的:我們需要根據mysql的binlog日誌同步乙個資料庫的資料到另乙個庫中,加如在binlog中對同一條資料做了insert,update,delete操作,我們往mq順序寫入了insert,update,delete操作的三條訊息,那麼根據分析,最終同步到另乙個庫中,這條資料是被刪除了的。但是,如果這三條訊息不是按照insert,update,delete順序被消費,而是按照delete,insert,update的順序被消費,那麼最終這條資料是會儲存到新庫中的。這就導致了資料錯亂了。下面分別講解下rabbitmq和kafka是如何保證訊息的順序性。
1、rabbitmq如何保證訊息順序性
1.1 rabbitmq的訊息不被順序消費的情況
注意:queue(佇列)中的訊息只能被乙個消費者所消費,然後消費者在消費訊息的過程中是無序的。如上圖所示,如果按照bac的消費順序,那麼最終資料庫中是被儲存這條資料的。這和我們預期的結果不符,如果這樣的情況很多,那麼就造成了資料庫中的資料完成不對,同步工作也是白費了。
1.2 rabbitmq保證訊息順序性的措施
如圖所示,rabbitmq保證訊息的順序性,就是拆分多個
queue,每個 queue 對應乙個 consumer(消費者),就是多一些 queue 而已,確實是麻煩點;或者就乙個 queue
但是對應乙個 consumer,然後這個 consumer 內部用記憶體佇列做排隊,然後分發給底層不同的 worker 來處理。
RabbitMQ保證訊息的順序性
當我們的系統中引入了mq之後,不得不考慮的乙個問題是如何保證訊息的順序性,這是乙個至關重要的事情,如果順序錯亂了,就會導致資料的不一致。比如 業務場景是這樣的 我們需要根據mysql的binlog日誌同步乙個資料庫的資料到另乙個庫中,加如在binlog中對同一條資料做了insert,update,d...
RabbitMQ保證訊息的順序性
當我們的系統中引入了mq之後,不得不考慮的乙個問題是如何保證訊息的順序性,這是乙個至關重要的事情,如果順序錯亂了,就會導致資料的不一致。比如 業務場景是這樣的 我們需要根據mysql的binlog日誌同步乙個資料庫的資料到另乙個庫中,加如在binlog中對同一條資料做了insert,update,d...
Rabbitmq如何保證訊息順序執行
訊息佇列中的若干訊息如果是對同乙個資料進行操作,這些操作具有前後的關係,必須要按前後的順序執行,否則就會造成資料異常。舉例 比如通過mysql binlog進行兩個資料庫的資料同步,由於對資料庫的資料操作是具有順序性的,如果操作順序搞反,就會造成不可估量的錯誤。比如資料庫對一條資料依次進行了 插入 ...