記錄一下rabbitmq的學習

2021-08-15 11:44:06 字數 1609 閱讀 4006

架構的演變:單一應用架構——>垂直應用架構——>分布式服務架構——>面向服務架構。

訊息佇列分布式是架構中的至關重要的一部分。

amqp,高階訊息佇列協議。因為rabbitmq就是這個協議的乙個實現。當然這個協議的實現有很多,但我們這裡只說說rabbitmq。

訊息佇列的作用:

非同步處理 

應用解耦

流量削峰,提供系統的處理能力。 

訊息佇列**

幾個重要的概念

:producer:訊息的生產者,應用客戶端程式;

consumer:訊息的消費者,應用客戶端程式;

exchange:交換器,訊息首先進去exchange,由exchange來確認訊息要被投遞到哪個queue中;

queue:訊息佇列,實際上就是訊息容器,用於儲存訊息,類似於乙個郵箱;

bidding:根據路由規則,將exchange和queue繫結;

routing_key:exchange根據這個路由鍵來投遞訊息到queue;

exchange的四種型別:

1、direct:需要指定乙個routing_key,即要發到的queue的名字,可使用預設exchange(空name的exchange)。

2、fanout:不需routing_key,只要指定bidding。

3、topic:訊息會傳送到所有關心routing_key的話題queue上,需要routing_key,也需要bidding。

bidding中可使用兩個特殊字元:「#」和「*」:「#」表示0個或若干個關鍵字,「*」表示乙個關鍵字。

如「log.*」能與「log.warn」匹配,無法與「log.warn.timeout」匹配;但是「log.#」能與上述兩者匹配。

4、header:不常用

訊息確認

訊息刪除之前必須要收到消費者的回執,否則訊息永遠保留著,並且如果存在多個消費者,那麼訊息將會繼續發給其他的消費者,

直到有了回執(message acknowledgement)。

這樣做可以防止訊息被消費者拿到後,沒來得及處理,但是消費者客戶端掛了。這樣訊息從佇列中刪除,但是並未被處理。

這裡有一點需要注意,如果開發人員沒有設定回執,那麼會導致嚴重的bug,即訊息會嚴重積壓,並且消費者重啟後會重複收到

訊息。訊息持久化

exchange持久化

queue持久化

message持久化

上面已經了解了訊息確認的重要性,但是還有一種情況。如果訊息在被消費者拿走之前,也就是存到訊息佇列時,rabbitmq

掛了,訊息也沒有被消費處理,但是也沒有了,怎麼辦?

這就用到了訊息持久化。當mq重啟後,還可以看到訊息。

認識一下 RabbitMQ

分布式系統中,如何在各個應用之間高效的進行通訊,是系統設計中的乙個關鍵。使用訊息 message broker 是乙個優雅的解決方案。rabbitmq就是乙個被廣泛應用的訊息 遵循amqp協議。接下來我們就了解一下 石頭 broker是經紀人的意思,促成賣方 買方的交易,例如房產經紀人。訊息模型中,...

記錄一下paddlepaddle深度學習心得

最近深度學習那叫乙個火啊,本人也入坑了,但網上找的內容也都亂七八糟的,那些 在本地執行頻頻出錯,硬體成本更是感人,自學成本太高了,又浪費時間。利用動態圖機制實現手寫數字識別 用paddlepaddle實現 密度估計 用paddlepaddle實現人臉識別 用paddlepaddle識別手勢 課程截圖...

每天一學習,記錄一下

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 給出n個整數和x,請問這n個整數中是否存在三個數a,b,c使得ax2 bx c 0,數字可以重複使用。輸入描述 第一行兩個整數n,x 第二行n個整數a i 表...