訊息中介軟體RabbitMQ

2021-08-14 14:22:38 字數 4602 閱讀 7074

rabbitmq

是用erlang實現的乙個高併發高可靠amqp訊息佇列伺服器。

rabbitmq

依賴於erlang環境,所以先要安裝erlang;

執行:otp_win32_r16b03.exe

再安裝rabbitmq

執行:rabbitmq-server-3.2.3.exe

新增環境變數:rabbitmq_serverpath:d:\program files (x86)\rabbitmq\rabbitmqserver\rabbitmq_server-3.2.3

給path變數新增內容,在其後面增加:;%rabbitmq_server%\sbin (注意前面的分號),然後確定即可

windows

環境下預設配置檔案為目錄

/%rabbitmqserver%/rabbitmq_server-3.3.5/etc

下的rabbitmq.config.example

檔案,我們可以直接在這個檔案中修改(可以不用去設定環境變數了),也可以自己再新建乙個

rabbitmq.config

檔案,然後把這個檔案路徑配置到環境變數中,這裡介紹就直接修改

rabbitmq.config.example

檔案。

cmd命令:

退一級目錄,

cd..

cd d:\program files(x86)\rabbitmq\rabbitmq server\rabbitmq_server-3.2.3\sbin

(erlang

的sbin

目錄位址) 啟用

rabbitmqweb

管理外掛程式

rabbitmq-plugins enable rabbitmq_management 

rabbitmq-service start--

啟動

rabbitmq-service stop--

停止

rabbitmq-plugins list--

檢視外掛程式命令

mochiweb

必須得有,

mochiweb

是乙個用來構建

web應用的輕便,高效的

應用框架的

erlang

預設埠

55672 

賬戶密碼:

的資料庫名稱規則是,

nodename@hostname

,docker

每次從docker image

啟動容器的時候會自動生成

hostname

,這樣一來,你儲存在主機上的資料庫就會沒用了,包括之前建立的使用者也會沒有了。所以在建立容器的時候必須指定

--hostname=rabbitmqhostone

,這樣docker

環境啟動後

rabbitmq

就會一直讀取固定目錄中的資料了

rabbitmq作用

對於乙個大型的軟體系統來說,它會有很多的元件或者說模組或者說子系統或者(

subsystem or component or submodule

)。那麼這些模組的如何通訊?這和傳統的

ipc有很大的區別。傳統的

ipc很多都是在單一系統上的,模組耦合性很大,不適合擴充套件(

scalability

);如果使用

socket

那麼不同的模組的確可以部署到不同的機器上,但是還是有很多問題需要解決。比如: 1

)資訊的傳送者和接收者如何維持這個連線,如果一方的連線中斷,這期間的資料如何方式丟失? 2

)如何降低傳送者和接收者的耦合度? 3

)如何讓

priority

高的接收者先接到資料? 4

)如何做到

load balance

?有效均衡接收者的負載? 5

)如何有效的將資料傳送到相關的接收者?也就是說將接收者

subscribe

不同的資料,如何做有效的

filter。

6)如何做到可擴充套件,甚至將這個通訊模組發到

cluster上?

7)如何保證接收者接收到了完整,正確的資料?

乙個message

有兩個部分:

payload

(有效載荷)和

label

(標籤);

就是乙個

tcp的連線。

producer

和consumer

都是通過

tcp連線到

rabbitmq server

的。以後我們可以看到,程式的起始處就是建立這個

tcp連線。

虛擬連線。它建立在上述的

tcp連線中。資料流動都是在

channel

中進行的。也就是說,一般情況是程式起始建立

tcp連線,第二步就是建立這個

channel。對於

os來說,建立和關閉

tcp連線是有代價的,頻繁的建立關閉

tcp連線對於系統的效能有很大的影響,而且

tcp的連線數也有限制,這也限制了系統處理高併發的能力。但是,在

tcp連線中建立

channel

是沒有上述代價的。對於

producer

或者consumer

來說,可以併發的使用多個

channel

進行publish

或者receive

。有實驗表明,

1s的資料可以

publish10k

的資料報。當然對於不同的硬體環境,不同的資料報大小這個資料肯定不一樣,但是我只想說明,對於普通的

consumer

或者producer

來說,這已經足夠了。如果不夠用,你考慮的應該是如何細化

split

你的設計。

每個message都要被acknowledged(確認,ack)如果有資料沒有被ack,那麼:

rabbitmq server會把這個資訊傳送到下乙個consumer。

如果這個

有bug

,忘記了

ack,那麼

rabbitmq server

不會再傳送資料給它,因為

server

認為這個

consumer

處理能力有限。

ack的機制可以起到限流的作用(benefittothrottling):在

consumer

處理完成資料後傳送

ack,甚至在額外的延時後傳送

ack,將有效的

balance consumer

的load。

有兩種方式,第一種的

reject

可以讓rabbitmq server

將該message

傳送到下乙個

consumer

。第二種是從

queue

message

。consumer

和procuder

都可以通過

queue.declare建立

queue

。procuder publish

的message

進入了exchange

。接著通過

「routing keys」

,rabbitmq

會找到應該把這個

message

放到哪個

queue

裡。queue

也是通過這個

routing keys

來做的繫結。

有三種型別的

exchanges

:direct, fanout,topic

。每個實現了不同的路由演算法(

routing algorithm)。

·direct exchange:如果

routing key匹配,

那麼message

就會被傳遞到相應的

queue

中。其實在

queue

建立時,它會自動的以

queue

的名字作為

routing key

來繫結那個

exchange。

·fanout exchange:會向響應的

queue

廣播。

·topic exchange:對

key進行模式匹配,比如

ab*可以傳遞到所有

ab*的

queue

訊息中介軟體RabbitMQ

1非同步 不等待 2解耦 任務的序列變並行 3流量削峰 大任務量負載均衡 rabbitmq,kafka,flume amqp advanced message queue protocol 0 訊息 分為訊息頭和訊息體,訊息頭包含 路由鍵 routing key,優先順序priority,deliv...

訊息中介軟體RabbitMQ

1.1.為什麼使用訊息佇列 應用場景 常見的訊息中介軟體有?用於實現分布式系統模組與模組之間的訊息通訊。原理 原理就是生產者生產訊息,把訊息傳送給activemq。activemq接收到訊息,然後檢視有多少個消費者,然後把訊息 給消費者,此過程中生產者無需參與。消費者接收到訊息後做相應的處理和生產者...

rabbitMq 訊息中介軟體

rabbitmq簡介 rabbitmq作為乙個訊息中介軟體,其雖然是用erlang 語言編寫的,其能夠勝任每秒十萬級別的資料讀與寫。可以說,效率是特別的高。訊息中介軟體,一般分為訊息提供者,訊息消費者,訊息佇列,交換機,繫結這幾個元件。訊息提供者 主要負責訊息的傳送到中介軟體伺服器中的佇列了,等待對...