rabbitmq系統學習(一)

2021-09-25 10:13:05 字數 1735 閱讀 8088

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