RabbitMQ是目前非常熱門的一款消息中間件,具有高可靠、易拓展、高可用及豐富的功能
1.什麼是消息中間件
消息是指在應用間傳送的數據。包含文本字符串、JSON、內嵌對象
消息隊列中間件(消息中間件或消息隊列)是指利用高效可靠的消息傳遞機制進行與平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分佈式下擴展進程間的通信
兩種傳遞模式:點對點(P2P,Point-to-Point)模式、發佈訂閱模式(Pub/Sub)
點對點模式基於隊列,消息生產者發送消息到隊列,消息消費者從隊列中接受消息
發佈訂閱模式模式定義瞭如何向一個內容節點發布和訂閱消息,這個內容節點稱爲主題,消息發佈者將消息發佈到某個主題,而消息訂閱者則從主題中訂閱消息,發佈訂閱模式在消息的一對多廣播時採用
2.消息中間件的作用
解耦:
冗餘(存儲):有些情況下,處理數據的過程會失敗,消息中間件可以把數據進行持久化直到它們已經被處理,通過這一方式規避了數據丟失風險
擴展性:消息中間件解耦了應用的處理過程,所以提高消息入隊和處理的效率是很容易的,只要另外增加處理過程即可,不需要改變代碼,也不需要調節參數
削峯:在訪問量劇增的情況下,應用仍然需要繼續發揮,但是這樣的突發流量並不常見。如果以能處理這類峯值爲標準而投入資源,無疑是巨大的浪費。
可恢復性:消息中間件降低了進程間的耦合度,所以即使一個處理消息的進程掛掉,加入消息中間件中的消息仍然可以在系統恢復後進行處理
順序保證性:在大多數使用場景下,數據處理的順序很重要,大部分消息中間件支持一定程度上的順序性
緩衝:在任何重要的系統中,都會存在需要不同處理時間的元素。消息中間件通過一個緩衝層來幫助任務最高效率地執行,寫入消息中間件的處理會儘可能快速。該緩衝層有助於控制和優化數據流經過系統的速度
異步通信:在很多時候應用不想也不需要立即處理消息。消息中間件提供了異步處理機制,允許應用把一些消息放入消息中間件中,但不立即處理它,在之後需要的時候再慢慢處理
3.rabbitmq的起源
rabbitmq是採用erlang語言實現AMQP(Advanced Message Queuing Protocol)的消息中間件。
4.rabbitmq的安裝
系統環境:
CentOS 7.5
erlang:R16B03-1
rabbitmq:rabbitmq-server 3.6.8
安裝所需各種類庫:
爲了避免安裝出問題先把各種類庫安裝
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
erlang安裝:
rabbitmq依賴erlang,需要安裝erlang,爲了方便利用yum命令安裝即可:yum install erlang
輸入erl驗證是否安裝成功,進入Erlang後可以使用如下命令退出Erlang:q().
rabbitmq安裝:
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_8/rabbitmq-server-generic-unix-3.6.8.tar.xz
tar xvf rabbitmq-server-generic-unix-3.6.8.tar.xz -C /opt
mv rabbitmq_server-3.6.8 rabbitmq
修改/etc/profile文件,添加下面的環境變量:
erport PATH=$PATH:/opt/rabbitmq/sbin
erport RABBITMQ_HOME=/opt/rabbitmq
5.rabbitmq的運行
啓動:
rabbitmq-server [-detached]
默認情況下,訪問rabbitmq服務的用戶名和密碼是guest和guest,且無法遠程訪問,需添加新用戶
添加新用戶:
添加用戶名爲root密碼爲root的用戶
rabitmqctl add_user root root
爲root用戶設置所有權限:
rabbitmqctl set_permissions -p / root "." "." ".*"
設置root用戶爲管理員角色
rabbitmqctl set_user_tags root administrator
開啓web管理界面:
rabbitmq-plugins enable rabbitmq_management
瀏覽器輸入 http://你的遠程服務器IP:15672/ 用root登錄即可