RabbitMQ知識梳理

2022-05-01 20:18:05 字數 3249 閱讀 7138

rabbitmq

入門使用

高階使用

高階佇列

生產者和消費者、佇列、交換機、路由鍵、繫結

生產者傳送訊息過程:

連線到 rabbitmq broker 建立乙個連線( connection) ,開啟通道 (channel)

宣告交換器 ,設定相關屬性

宣告佇列,設定相關屬性

通過路由鍵將交換器和佇列繫結起來

傳送訊息至 rabbitmq broker ,其中包含路由鍵、交換器等資訊

相應的交換器根據接收到的路由鍵查詢相匹配的佇列

如果找到 ,則將從生產者傳送過來的訊息存入相應的佇列中

如果沒有找到 ,則根據生產者配置的屬性選擇丟棄還是回退給生產者

關閉通道和連線

消費者接收訊息的過程:

連線到 rabbitmq broker ,建立乙個連線(connection ,開啟 個通道(channel)

向 rabbitmq broker 請求消費相應佇列中的訊息,可能會設定相應的**函式,以及做些準備工作

等待 rabbitmq broker 回應並投遞相應佇列中的訊息, 消費者接收訊息

消費者確認(ack)接收到的訊息

rabbitmq 從佇列中刪除相應己經被確認的訊息

關閉通道和連線

即advanced message queuing protocol,乙個提供統一訊息服務的應用層標準高階訊息佇列協議

windows安裝(最簡單,適合初學者)

linux安裝(標準和推薦方式,生產使用)

docker安裝(最最簡單,前提是會docker)

正常消費,從佇列中移除

被拒絕(reject或nack),進入死信佇列

未被確認confirm,重回佇列(mandatory、basicrecover)

訊息超時ttl(time to live 的簡稱,即過期時間),進入死信佇列

備份交換機,altemate exchange ,簡稱ae

mapargs = new hashmap(); 

args.put("a1ternate-exchange" , "myae");

channe1.exchangedec1are( "norma1exchange" , "direct" , true , fa1se , args);

channe1 . exchangedec1are( "myae " , "fanout" , true , fa1se , nu11) ;

channe1 .queuedec1are( "norma1queue " , true , fa1se , fa1se , nu11);

channe1 .queueb nd

( norma1queue "norma1exchange" , " norma1key")

; channe1 .queuedec1are( "unroutedqueue " , true , fa1se , fa1se , nu11);

channel .queuebind( "unroutedqueue " , "myae " , "");

死信佇列

映象佇列

持久化 druable

佇列設定, 佇列中所有訊息都有相同的過期時間

mapargss = new hashmap(); 

argss.put("x-message-ttl " , 6000);

channel . queuedeclare(queuename , durable , exclusive , autodelete , argss) ;

訊息設定,對訊息本身進行單獨設定,每條訊息的 ttl 可以不同

amqp.basicproperties properties = new amqp.basicproperties() ; 

properties.setexpiration("60000");

channel . basicpublish (exchangename, routingkey, mandatory, propertes, "ttltestmessage".getbytes());

dlx ,全稱為 dead-letter-exchange ,可以稱之為死信交換器,也有人稱之為死信郵箱。當

訊息在乙個佇列中變成死信 (dea message) 之後,它能被重新被傳送到另乙個交換器中,這個

交換器就是 dlx ,繫結 dlx 的佇列就稱之為死信佇列。

訊息變成死信 般是由於以下幾種情況:

1、訊息被拒絕 (basic.reject/basic .na ck) ,井且設定 requeue 引數為 alse;

2、訊息過期;

3、令佇列達到最大長度。

channel . exchangedeclare("dlx_exchange " , "dir ect "); // 建立 dlx: dlx_exchange 

mapargs = new hashmap();

args . put("x-dead-letter-exchange" , " dlx exchange ");

//為佇列 myqueue 新增 dlx

channel . queuedeclare("myqueue" , false , false , false , args);

也可以為這個 dlx 指定路由鍵,如果沒有特殊指定,則使用原佇列的路由鍵:

args.put("x-dead-letter-routing-key" , "dlx-routing-key");

通過dlx死信佇列和ttl時間過期模擬出延遲佇列的功能。

優先順序高的訊息具備優先被消費的特權,預設最低為0。如果消費速度大於生產速度,則沒有意義

mapargs =new hashmap() ; 

args . put( "x-rnax-priority" , 10) ;

channel.queuedeclare( " queue . priority" , true , fa1se , false , args) ;

參考書籍:

《rabbitmq 實戰指南》朱忠華 著 

rabbitmq 實戰指南

rabbitmq 簡單梳理

概念 生產者 producer,簡寫p 負責發布訊息。交換機 exchange,簡寫x 負責中轉訊息。路由 route,簡寫r 即 x q的路線名。訊息佇列 queue,簡寫q 負責臨時儲存訊息。消費者 customer,簡寫c 負責處理訊息。完整關係 p 負責發布訊息,可繫結到乙個exchange...

知識梳理計畫

知識的學習一般來說有兩個過程,第乙個是摳細節,理解知識,另乙個是將知識點進行總結歸納融入到自己的知識體系中。如果工作學習過程中需要用到該知識點的時候可以很快的提取出來。在這幾年的學習以及研究生活中,我也陸陸續續的鑽研過一些演算法,但是很多東西,都是當時懂了,但是過了一段時間,可能就忘記了,等到需要使...

Hive 知識梳理

1 order by,sort by,distribute by,cluster by 背景表結構 在講解中我們需要貫串乙個 例子,所以需要設計乙個情景,對應 還要有乙個表結構和填充資料。如下 有 3 個字段,分別為 personid 標識某乙個人,company 標識一家公司名稱,money 標識...