為什麼要使用訊息佇列

2021-08-19 15:25:18 字數 1420 閱讀 5519

參考:

訊息佇列本身有確認訊息被正確消費的機制

4.2message acknowledgment訊息確認

為了保證資料不被丟失,rabbitmq支援訊息確認機制,為了保證資料能被正確處理而不僅僅是被consumer收到,那麼我們不能採用no-ack,而應該是在處理完資料之後傳送ack.

在處理完資料之後傳送ack,就是告訴rabbitmq資料已經被接收,處理完成,rabbitmq可以安全的刪除它了.

如果consumer退出了但是沒有傳送ack,那麼rabbitmq就會把這個message傳送到下乙個consumer,這樣就保證在consumer異常退出情況下資料也不會丟失.

rabbitmq它沒有用到超時機制.rabbitmq僅僅通過consumer的連線中斷來確認該message並沒有正確處理,也就是說rabbitmq給了consumer足夠長的時間做資料處理。

如果忘記ack,那麼當consumer退出時,mesage會重新分發,然後rabbitmq會占用越來越多的記憶體.

1.背景

rabbitmq是乙個由erlang開發的amqp(advanved message queue)的開源實現。

2.應用場景

2.1非同步處理

場景說明:使用者註冊後,需要發註冊郵件和註冊簡訊,傳統的做法有兩種1.序列的方式;2.並行的方式

(1)序列方式:將註冊資訊寫入資料庫後,傳送註冊郵件,再傳送註冊簡訊,以上三個任務全部完成後才返回給客戶端。 這有乙個問題是,郵件,簡訊並不是必須的,它只是乙個通知,而這種做法讓客戶端等待沒有必要等待的東西.

(2)並行方式:將註冊資訊寫入資料庫後,傳送郵件的同時,傳送簡訊,以上三個任務完成後,返回給客戶端,並行的方式能提高處理的時間。

假設三個業務節點分別使用50ms,序列方式使用時間150ms,並行使用時間100ms。雖然並性已經提高的處理時間,但是,前面說過,郵件和簡訊對我正常的使用**沒有任何影響,客戶端沒有必要等著其傳送完成才顯示註冊成功,英愛是寫入資料庫後就返回.

(3)訊息佇列

引入訊息佇列後,把傳送郵件,簡訊不是必須的業務邏輯非同步處理

由此可以看出,引入訊息佇列後,使用者的響應時間就等於寫入資料庫的時間+寫入訊息佇列的時間(可以忽略不計),引入訊息佇列後處理後,響應時間是序列的3倍,是並行的2倍。

2.2 應用解耦

場景:雙11是購物狂節,使用者下單後,訂單系統需要通知庫存系統,傳統的做法就是訂單系統呼叫庫存系統的介面.

為什麼要使用訊息佇列?

在實際的專案實踐中,訊息佇列有的使用還是比較常用的,有時在想訊息佇列的好處是什麼,使用mq能帶來什麼好處。在說之前,目前市場主流的幾種mq activemq,rabbitmq,rocketmq,kafka 關於mq的入門就不說了,可以找下教程,寫個demo測試一下就好了,還是比較簡單的。先上張圖了解...

為什麼要使用訊息佇列

緩衝和削峰 上游資料時有突發流量,下游可能扛不住,或者下游沒有足夠多的機器來保證冗餘,kafka在中間可以起到乙個緩衝的作用,把訊息暫存在kafka中,下游服務就可以按照自己的節奏進行慢慢處理。解耦和擴充套件性 專案開始的時候,並不能確定具體需求。訊息佇列可以作為乙個介面層,解耦重要的業務流程。只需...

為什麼要使用訊息佇列

的 個人覺得關於訊息佇列的作用的概括簡明扼要,遂摘錄至此 現代的網際網路應用大量地使用了訊息佇列 messaging 訊息佇列不僅被用於系統內部元件之間的通訊,同時也被用於系統跟其它服務之間的互動。訊息佇列的使用可以增加系統的可擴充套件性 靈活性和使用者體驗。非基於訊息佇列的系統,其執行速度取決於系...