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