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 標識...