文章目錄
- 一、RabbitMQ簡介及AMQP協議
- 1、 初識
- 2、 簡介
- 3.AMQP
- 二、RabbitMQ安裝及入門
- 將mq的tcp監聽端口和網頁管理端口都設置成允許遠程訪問
- root權限
- 三、核心概念
- 1. 整體架構
- 2. mq是如何流轉消息的呢
一、RabbitMQ簡介及AMQP協議
1、 初識
- 跨平台、跨語言
- 基於AMQP協議
- erLang語言編寫
2、 簡介
- 用erlang編寫,低延遲
- 很多大的互聯網公司都在用
- 開源、性能優秀、穩定性保障
- 與SpringbAMQP完美整合、、API豐富
3.AMQP
AMQP(Advanced Message Queuing Protocol,高級消息隊列協議)是一個進程間傳遞異步消息的網絡協議。
工作過程
發佈者(Publisher)發佈消息(Message),經由交換機(Exchange)。
交換機根據路由規則將收到的消息分發給與該交換機綁定的隊列(Queue)。
最後 AMQP 代理會將消息投遞給訂閲了此隊列的消費者,或者消費者按照需求自行獲取。
深入理解
1、發佈者、交換機、隊列、消費者都可以有多個。同時因為 AMQP 是一個網絡協議,所以這個過程中的發佈者,消費者,消息代理 可以分別存在於不同的設備上。
2、發佈者發佈消息時可以給消息指定各種消息屬性(Message Meta-data)。有些屬性有可能會被消息代理(Brokers)使用,然而其他的屬性則是完全不透明的,它們只能被接收消息的應用所使用。
3、從安全角度考慮,網絡是不可靠的,又或是消費者在處理消息的過程中意外掛掉,這樣沒有處理成功的消息就會丟失。基於此原因,AMQP 模塊包含了一個消息確認(Message Acknowledgements)機制:當一個消息從隊列中投遞給消費者後,不會立即從隊列中刪除,直到它收到來自消費者的確認回執(Acknowledgement)後,才完全從隊列中刪除。
4、在某些情況下,例如當一個消息無法被成功路由時(無法從交換機分發到隊列),消息或許會被返回給發佈者並被丟棄。或者,如果消息代理執行了延期操作,消息會被放入一個所謂的死信隊列中。此時,消息發佈者可以選擇某些參數來處理這些特殊情況。
詳細參考鏈接
二、RabbitMQ安裝及入門
1、在安裝erlang之前先安裝下依賴文件(這一步不要忘掉了, 不然後面./configure的時候要報錯):
yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto
2.到erlang官網去下載erlang安裝包
wget -c http://erlang.org/download/otp_src_20.2.tar.gz
接下來解壓:
tar -zxvf otp_src_20.2.tar.gz
cd otp_src_20.2/
3. 編譯安裝
./configure --prefix=/usr/local/erlang
make && make install
4、測試安裝是否成功:
cd /usr/local/erlang/bin/
./erl
halt(). 退出控制枱
5、配置環境變量
vim /etc/profile
在末尾加入這麼一行即可:
export PATH=
PATH:/usr/local/rabbitmq_server-3.6.15/sbin
source /etc/profile
3、rabbitmq的基本操作:
啓動:rabbitmq-server -detached
關閉:rabbitmqctl stop
查看狀態:rabbitmqctl status
4、配置rabbitmq網頁管理插件
啓用插件: rabbitmq-plugins enable rabbitmq_management
訪問管理頁面:http://192.168.?.?:15672 端口默認為15672
或許你打不開 記得把防火牆關了
關閉防火牆命令:systemctl stop firewalld.service
又或者你這樣:
將mq的tcp監聽端口和網頁管理端口都設置成允許遠程訪問
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=5672/tcp
systemctl restart firewalld.service
(我一般都是暴力操作直接關閉防火牆,因為我記得之前的胖領導給我説過linux 上的防防火牆沒什麼用)
打開之後有個用户名和密碼
rabbitmq有一個默認的用户名和密碼,guest和guest,但為了安全考慮,該用户名和密碼只允許本地訪問,如果是遠程操作的話,需要創建新的用户名和密碼;
root權限
rabbitmqctl add_user username passwd //添加用户,後面兩個參數分別是用户名和密碼 (liudan liudan123)
rabbitmqctl set_permissions -p / username “." ".” “.*” //添加權限
rabbitmqctl set_user_tags username administrator //修改用户角色,將用户設為管理員
參考鏈接:
三、核心概念
1. 整體架構
生產者p生產消息,然和傳給exchange、exchange路由給隊列,消費者監聽隊列,消費消息。
2. mq是如何流轉消息的呢