日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)

發(fā)布時間:2024/10/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、消息中間件的相關(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。