RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)
文章目錄
- 一、消息中間件的相關(guān)問題
- 1、消息中間件是什么?
- 1.1、同步詳解
- 1.2、異步詳解
- 2、為什么要使用消息中間件?
- 2.1、消息中間件的優(yōu)點
- 2.2、異步提升性能分析
- 2.3、降低耦合度分析
- 2.4、流量削峰
- 3、協(xié)議精講
- 4、消息中間件技術(shù)選型
- 二、RabbitMQ安裝
- 2.1、Erlang的下載安裝
- 2.2、RabbitMQ的下載安裝
- 2.3、查看RabbitMQ是否安裝成功
- 三、安裝RabbitMQ的web客戶端
- 1、安裝
- 2、權(quán)限指令總結(jié)
- 四、Docker安裝RabbitMQ
- 1、Docker的安裝
- 2、Docker安裝RabbitMQ
- 待寫...........
學(xué)習(xí)一門中間件技術(shù)之前當(dāng)然要對其進行了解,心中要有相關(guān)疑問,帶著問題去學(xué)習(xí)一門技術(shù),才能把握其重點。從一個問題的引入,慢慢向深層次靠攏。
比如:看到消息中間件這個詞,應(yīng)該想到的是消息中間件是什么?
然后就去了解消息中間件;之后可能又會有疑問,為什么要引入消息中間件呢?心中無疑問時,或許你已經(jīng)了解的差不多了
帶著疑問去學(xué)習(xí),更能把握技術(shù)主干。
一、消息中間件的相關(guān)問題
1、消息中間件是什么?
消息中間件是利用高效可靠的消息傳遞機制進行異步的數(shù)據(jù)傳輸,并基于數(shù)據(jù)通信進行分布式系統(tǒng)的集成。通過提供消息隊列模型和消息傳遞機制,可以在分布式環(huán)境下擴展進程間的通信。
看到官方提供的術(shù)語,可能難以理解;可以通過概念中的異步分析,了解消息中間件。有異步當(dāng)然就有同步這個概念。
消息中間件負責(zé)消息的傳遞、存儲、分發(fā),數(shù)據(jù)的存儲和分發(fā)要遵循某種規(guī)范(為了不同語言可以進行交互)
1.1、同步詳解
平常我們在做項目時,為了完成業(yè)務(wù)需求,我們可能需要不同系統(tǒng)間調(diào)用接口。
用戶發(fā)起請求給系統(tǒng)A,系統(tǒng)A接到請求直接調(diào)用系統(tǒng)B,系統(tǒng)B返回結(jié)果后,系統(tǒng)A才能返回結(jié)果給用戶,這種模式就是同步調(diào)用。
從這你就可以看出,同步調(diào)用時,系統(tǒng)之間相互依賴;用戶發(fā)起請求,相關(guān)的系統(tǒng)都要跟著運行,如果一個系統(tǒng)出現(xiàn)了問題,那么整個就over了。
1.2、異步詳解
想必都了解異步是什么意思,發(fā)送方和接收方誰也不知道誰;比如發(fā)送方只管我發(fā)消息了,也不管有沒有接收。相對來說就是相互透明的。(在軟件開發(fā)中,透明是看不到的意思)
從這張圖我可以看出,生產(chǎn)者不斷發(fā)送消息到消息隊列;消費者不斷從隊列獲取消息,所以生產(chǎn)者只關(guān)心消息的發(fā)送,消費者只關(guān)心獲取消息;輕松實現(xiàn)系統(tǒng)間解耦。
通過異步可以輕松理解消息中間件的實現(xiàn)機制。
簡單了說消息中間件是一個獨立部署的系統(tǒng),可以實現(xiàn)系統(tǒng)之間的異步調(diào)用。
2、為什么要使用消息中間件?
2.1、消息中間件的優(yōu)點
異步提升性能、降低耦合度、流量削峰
2.2、異步提升性能分析
可以看出不使用消息中間件一共耗時20ms,這樣的串行執(zhí)行處于一種阻塞狀態(tài),意思是某個系統(tǒng)沒有執(zhí)行完是不會返回結(jié)果的。
如果引入消息中間件之后呢?
一共耗時100ms,異步執(zhí)行處于非阻塞狀態(tài),即便某個系統(tǒng)需要執(zhí)行很久,不過不會影響其他系統(tǒng)的執(zhí)行。
2.3、降低耦合度分析
可以看出如果不使用消息中間件,一旦B系統(tǒng)出現(xiàn)了問題,那么層層結(jié)果返回,用戶收到的就是一個異常,然后就需要等著系統(tǒng)修復(fù)
使用了消息中間件之后,A系統(tǒng)發(fā)送消息到消息中間件之后就會直接返回結(jié)果;B系統(tǒng)被工程師修復(fù)好之后,重新獲取消息執(zhí)行未執(zhí)行的操作就行了。系統(tǒng)之間相互分離,耦合度大大降低。
2.4、流量削峰
如上圖,如果系統(tǒng)B最高以4000QPS的速度查詢數(shù)據(jù)庫,當(dāng)系統(tǒng)A中的QPS超過一萬時,此時超過了系統(tǒng)A的最大限值,此時請求全部打到了系統(tǒng)B,此時B是最高以4000QPS的速度查詢數(shù)據(jù)庫,所以數(shù)據(jù)庫就會崩潰。
如果使用了消息中間件,系統(tǒng)A的全部請求會累積到消息中間件中,然后系統(tǒng)B根據(jù)自己的需求每次從消息中間件中讀取多少請求。
使用消息中間件可以屏蔽不同語言的差異性(簡單了說就是語言之間可以相互通訊,使用消息中間件屏蔽了具體的實現(xiàn)細節(jié))
3、協(xié)議精講
消息中間件一般負責(zé)數(shù)據(jù)的傳遞、存儲、分發(fā)三個部分;
然后問題來了,假設(shè)兩個系統(tǒng)A系統(tǒng)和B系統(tǒng),采用了不同的語言進行實現(xiàn);那么怎么進行消息傳遞呢?所以說消息中間件需要遵循某種協(xié)議。
另外這個協(xié)議一般來說是比較簡單的協(xié)議,比如AMQP、Kalfka等
注:不適用http協(xié)議,這個協(xié)議比較復(fù)雜,包含了狀態(tài)碼、響應(yīng)碼、數(shù)據(jù)加密解密等
4、消息中間件技術(shù)選型
1、ActiveMQ:老牌的Apache產(chǎn)品,完全支持JMS規(guī)范(JMS定義了Java API層面的標準)
2、Kafka:大數(shù)據(jù)領(lǐng)域的產(chǎn)品,基于TCP/IP二進制協(xié)議,速度非常快,但不支持事務(wù),消息可能丟失、重復(fù)、錯誤。
3、RocketMQ:阿里巴巴出品,性能很高,但事務(wù)方面沒有開源。
4、RabbitMQ:使用Erlang語言開發(fā)的消息隊列系統(tǒng),基于AMQP協(xié)議實現(xiàn),AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。
作為穩(wěn)定、流行、開源等綜合性最強的RabbitMQ當(dāng)然要受到鄙人的關(guān)注了
二、RabbitMQ安裝
我用的是阿里云服務(wù)器(我絕對不是打廣告的哈😀)
遠程連接工具用的是Xshell,還有文件傳輸工具Xftp
2.1、Erlang的下載安裝
1.下載Erlang的JDK(因為RabbitMQ是使用erlang語言編寫的)
wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
2、解壓Erlang壓縮包
rpm -Uvh erlang-solution-2.0.1.noarch.rpm
3、安裝Erlang
yum install -y erlang
4、查Erlang是否安裝成功
erl -v
2.2、RabbitMQ的下載安裝
1、安裝RabbitMQ依賴的插件socat
yum install -y socat
2、下載RabbitMQ
查看系統(tǒng)版本
lsb_release -a
去官網(wǎng)下載查詢版本
https://www.rabbitmq.com/download.html
右鍵RHEL/Centos 8.x --》復(fù)制連接地址
下載RabbitMQ
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el8.noarch.rpm
3、安裝RabbitMQ
解壓RabbitMQ壓縮包
安裝RabbitMQ
yum install rabbitmq-server -y
2.3、查看RabbitMQ是否安裝成功
1、啟動服務(wù)
systemctl start rabbitmq-server
2、查看rabbitmq的狀態(tài)
systemctl status rabbitmq-server
出現(xiàn)這個就說明安裝成功了。
三、安裝RabbitMQ的web客戶端
1、安裝
1.1、輸入
rabbitmq-plugins enable rabbitmq_management
1.2、重啟服務(wù)
systemctl restart rabbitmq-server
1.3、瀏覽器訪問http://你的ip地址:15672
注意云服務(wù)器一定要在安全組中開放15672端口
1.3.1、如果是本地服務(wù)器
username:guest
password:guest
1.3.2、如果是遠程服務(wù)器需要進行授權(quán)
1.3.2.1、新增用戶
rabbitmqctl add_user root root
1.3.2.2、設(shè)置用戶權(quán)限
rabbitmqctl set_user_tags root administrator
下面的權(quán)限是借鑒的網(wǎng)友
management
用戶可以通過AMQP做的任何事外加:
列出自己可以通過AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和關(guān)閉自己的channels 和 connections
查看有關(guān)自己的virtual hosts的“全局”的統(tǒng)計信息,包含其他用戶在這些virtual hosts中的活動。
policymaker
management可以做的任何事外加:
查看、創(chuàng)建和刪除自己的virtual hosts所屬的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他們不能登錄的virtual hosts
查看其他用戶的connections和channels
查看節(jié)點級別的數(shù)據(jù)如clustering和memory使用情況
查看真正的關(guān)于所有virtual hosts的全局的統(tǒng)計信息
administrator
policymaker和monitoring可以做的任何事外加:
創(chuàng)建和刪除virtual hosts
查看、創(chuàng)建和刪除users
查看創(chuàng)建和刪除permissions
關(guān)閉其他用戶的connection
1.3.3、輸入username:root,password:root登錄控制臺
2、權(quán)限指令總結(jié)
1、rabbitmqctl add_user 賬號 密碼 添加用戶
2、rabbitmqctl set_user_tags 賬號 權(quán)限 賦予權(quán)限
3、rabbitmqctl change_password Username Newpassword 修改密碼
4、rabbitmqctl delete_user Username 刪除用戶
5、rabbitmqctl list_user 查看所有用戶
6、rabbitmqctl set_permissions -p / Username “.* " ". " ". *” 設(shè)置用戶為administrator角色
四、Docker安裝RabbitMQ
1、Docker的安裝
1、更新yum包
yum update
2、安裝軟件包yum-util(提供yum-config-manager功能),還有device-mapper的依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
3、設(shè)置docker倉庫為阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安裝docker
yum install docker-ce -y
5、查看docker 版本
docker -v
6、配置加速鏡像
vim /etc/docker/daemon.json
修改為如下內(nèi)容
{
“registry-mirrors”: [“https://registry.docker-cn.com”]
}
systemctl restart docker.service
重啟docker即可
sudo systemctl restart docker
本地Centos7安裝docker步驟:https://blog.csdn.net/Kevinnsm/article/details/111409921
2、Docker安裝RabbitMQ
下載rabbitmq
docker pull rabbitmq
啟動rabbitmq
docker run -d --hostname my-rabbit --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq
–hostname:指定容器主機名稱
–name:指定容器名稱
-p :端口映射(docker內(nèi)部端口和外網(wǎng)端口)
查看鏡像ID
docker ps
安裝rabbitmq客戶端
docker exec -it 鏡像ID /bin/bash //進入容器內(nèi)部
rabbitmq-plugins enable rabbitmq_management
待寫…
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea2021如何开启RunDashb
- 下一篇: Ⅰ:zookeeper的单机安装 - 详