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