訊息佇列0 訊息佇列概述

2022-10-11 10:09:11 字數 2409 閱讀 4759

最近在看訊息佇列,找了好多資料。終於能夠簡單的理解了訊息佇列。

訊息(message)是指在應用間傳送的資料。訊息可以非常簡單,比如只包含文字字串,也可以更複雜,可能包含嵌入物件。

訊息佇列(message queue)是一種應用間的通訊方式,訊息傳送後可以立即返回,由訊息系統來確保訊息的可靠傳遞。訊息發布者只管把訊息發布到 mq 中而不用管誰來取,訊息使用者只管從 mq 中取訊息而不管是誰發布的。這樣發布者和使用者都不用知道對方的存在

訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削鋒等問題。實現高效能,高可用,可伸縮和最終一致性架構。是大型分布式系統不可缺少的中介軟體。

目前在生產環境,使用較多的訊息佇列有activemq,rabbitmq,zeromq,kafka,metamq,rocketmq等。

下面內容參考自知乎上祁達方的文章。

小紅是小明的姐姐。

小紅希望小明多讀書,常尋找好書給小明看,之前的方式是這樣:小紅問小明什麼時候有空,把書給小明送去,並親眼監督小明讀完書才走。久而久之,兩人都覺得麻煩。

後來的方式改成了:小紅對小明說「我放到書架上的書你都要看」,然後小紅每次發現不錯的書都放到書架上,小明則看到書架上有書就拿下來看。

書架就是乙個訊息佇列,小紅是生產者,小明是消費者。

訊息佇列的好處

1.小紅想給小明書的時候,不必問小明什麼時候有空,親手把書交給他了,小紅只把書放到書架上就行了。這樣小紅小明的時間都更自由。

2.小紅相信小明的讀書自覺和讀書能力,不必親眼觀察小明的讀書過程,小紅只要做乙個放書的動作,很節省時間。

3.當明天有另乙個愛讀書的小夥伴小強加入,小紅仍舊只需要把書放到書架上,小明和小強從書架上取書即可(唔,姑且設定成多個人取一本書可以每人取走一本吧,可能是拷貝電子書或影印,暫不考慮版權問題)。

4.書架上的書放在那裡,小明閱讀速度快就早點看完,閱讀速度慢就晚點看完,沒關係,比起小紅把書遞給小明並監督小明讀完的方式,小明的壓力會小一些。

這就是訊息佇列的四大好處:

解耦每個成員不必受其他成員影響,可以更獨立自主,只通過乙個簡單的容器來聯絡。

小紅甚至可以不知道從書架上取書的是誰,小明也可以不知道往書架上放書的人是誰,在他們眼裡,都只有書架,沒有對方。

毫無疑問,與乙個簡單的容器打交道,比與複雜的人打交道容易一萬倍,小紅小明可以自由自在地追求各自的人生。

提速小紅選擇相信「把書放到書架上,別的我不問」,為自己節省了大量時間。

小紅很忙,只能抽出五分鐘時間,但這時間足夠把書放到書架上了。

廣播小紅只需要勞動一次,就可以讓多個小夥伴有書可讀,這大大地節省了她的時間,也讓新的小夥伴的加入成本很低。

削峰假設小明讀書很慢,如果採用小紅每給一本書都監督小明讀完的方式,小明有壓力,小紅也不耐煩。

反正小紅給書的頻率也不穩定,如果今明兩天連給了五本,之後隔三個月才又給一本,那小明只要在三個月內從書架上陸續取走五本書讀完就行了,壓力就不那麼大了。

訊息佇列的缺點

引入複雜度

毫無疑問,「書架」這東西是多出來的,需要地方放它,還需要防盜。

暫時的不一致性

假如媽媽問小紅「小明最近讀了什麼書」,在以前的方式裡,小紅因為親眼監督小明讀完書了,可以底氣十足地告訴媽媽,但新的方式裡,小紅回答媽媽之後會心想「小明應該會很快看完吧……」

這中間存在著一段「媽媽認為小明看了某書,而小明其實還沒看」的時期,當然,小明最終的閱讀狀態與媽媽的認知會是一致的,這就是所謂的「最終一致性」。

訊息佇列的使用場景

生產者不需要從消費者處獲得反饋

引入訊息佇列之前的直接呼叫,其介面的返回值應該為空,這才讓明明下層的動作還沒做,上層卻當成動作做完了繼續往後走——即所謂非同步——成為了可能。

小紅放完書之後小明到底看了沒有,小紅根本不問,她預設他是看了,否則就只能用原來的方法監督到看完了。

容許短暫的不一致性

媽媽可能會發現「有時候據說小明看了某書,但事實上他還沒看」,只要媽媽滿意於「反正他最後看了就行」,非同步處理就沒問題。

如果媽媽對這情況不能容忍,對小紅大發雷霆,小紅也就不敢用書架方式了。

確實是用了有效果

即解耦、提速、廣播、削峰這些方面的收益,超過放置書架、監控書架這些成本。

否則如果是盲目照搬,「聽說老趙家買了書架,咱們家也買乙個」,買回來卻沒什麼用,只是讓步驟變多了,還不如直接把書遞給對方呢,那就不對了。

不得不佩服大牛的解釋的這麼通俗易懂

參考:

[1]-祁達方:好書一起讀(149):訊息佇列(

[2]-jasongeng88:乙個故事告訴你什麼是訊息佇列 (

[3]-預流:訊息佇列之 rabbitmq(

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...

訊息佇列(一) Kafka概述

iwehdio的 學習自 訊息佇列有什麼使用場景?消費者怎麼從訊息佇列裡邊得到資料?引入訊息佇列會產生什麼問題?重複消費 如何保證介面冪等 弱校驗 順序消費 kafka為了擁有更強大的功能,提供了四大核心介面 topics producers consumers 訊息在kafka中的處理歷程 訊息生...