架構的演變:單一應用架構——>垂直應用架構——>分布式服務架構——>面向服務架構。
訊息佇列分布式是架構中的至關重要的一部分。
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 表...