activemq,kafka使用zookeeper做管理
rocketmq自己實現nameserver broke管理
高階訊息佇列協議
server:又稱broker,接收客戶端的連線,實現amqp實體服務
connection:連線,應用程式與broker的網路連線
channel:網路通道,幾乎所有操作都在channel中進行,channel是進行訊息讀寫的通道。客戶端可建立多個channel,每個channel代表乙個會話任務
message:訊息,傳遞的資料,由properties和body組成。properties可以對訊息進行修飾,比如訊息的優先順序、延遲等高階特性;body則是訊息體內容
virtual host:虛擬位址,用於進行邏輯隔離,最上層的訊息路由。乙個virtual host裡面可以有若干個exchange和queue,同乙個virtual host裡面不能有相同名稱的exchange或queue
exchange:交換機,接收訊息,根據路由鍵**訊息到繫結的佇列
binding:exchange和queue之間的虛擬連線,binging中可以包含routing key
routing key:乙個路由規則,虛擬機器可以用它來確定如何路由乙個特定訊息
queue:也稱為message queue,訊息佇列,儲存訊息並將它們**給消費者
消費端
exchange:
direct exchange
topic exchange
fanout exchange
bingding-繫結
queue-訊息佇列
message-訊息
message-其他屬性
virtual host-虛擬主機
訊息如何保證100%的投遞成功
可靠性投遞
冪等性
confirm確認訊息
return訊息機制
消費端自定義監聽
消費端限流
rabbitmq提供了一種qos(服務質量保證)功能,即在非自動確認訊息的前提下,如果一定數目的訊息(通過基於consume或者channel設定qos的值)未被確認前,不進行消費新的訊息
void basicqos(uint prefetchsize,ushort prefetchcount,bool global);
消費者消費量限制方法
prefetchcount:表示不要同時給消費者推送多餘n個訊息,即一旦有n個訊息還沒有ack,則該consumer將block掉,知道有訊息ack
global:true/false 是否將上面設定應用於channel,簡單說,就是上面限制是channel級別還是consumer級別
prefetchsize和global這兩項,rabbitmq沒有實現,prefetch_count在no_ask=false的情況下生效,即在自動應答的情況下這兩個值是不生效的autoack設定為false
channel.basicqos(0,3,false);//表示consumer級別,限制3條都應答了才繼續推送
消費端ack與重回佇列
ttl佇列/訊息
死信佇列
agruments放在宣告的佇列上
channel.queuedeclare(queuename,true,false,false,agruments);
Git系統學習 一
1.學習背景 最近工作並不是很忙,就想在網上找一些開源專案去做做,這樣就可以熟悉新的知識和架構,對自己的能力也有一定的提公升,於是就在github這個託管git的 上,那時就感覺很糊塗,不知道git的這種版本管理軟體是怎麼運作的,怕把別人的專案搞出問題。於是google了下,想深入的學習這個軟體。2...
系統學習VB 一
前言 vb是一種簡單易學的程式語言,是目前windows平台上視覺化程度最高的開發工具,適合開發windows作業系統下的各種應用程式。書寫規則 1 續行 一條語句太長時,將其分成多行 續行符 空格後加乙個下劃線 2 注釋 注釋符 單引號 3 將多行語句寫成一行 冒號 4 命名約定 1 以字母開頭 ...
linux系統學習(一)
檢視linux版本資訊 linux根目錄下系統資料夾的含義 boot該目錄下預設存放的是linux的啟動檔案和核心,一般200m swap交換分割槽,一般設定成記憶體的兩倍。別超過3,4g initrd它的英文含義是boot loader initialized ram disk,就是由boot l...