RabbitMQ 訊息佇列

2021-10-23 17:34:29 字數 4253 閱讀 2427

mq 概念

mq:message queuing,訊息佇列是高併發系統的核心元件之一,訊息佇列的目的是為了實現各個應用程式之間的通訊,這樣多個應用程式可以執行在不同的主機上,通過mq就可以實現誇網路通訊,因此 mq 實現了業務的解耦和非同步機制

訊息列隊的特點:

1,解決瞬時寫壓力大於應用服務能力導致訊息丟失、系統奔潰等問題

2,系統解耦(解決不同重要程度、不同能力級別系統之間依賴導致一死全死)

3,提公升效能與併發能力

目前主流的訊息佇列軟體有 rabbitmq、kafka、activemq、rocketmq 等

rabbitmq

官網:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-4wy8u7wp-1598186670378)(typora\29.png)]

rabbitmq的優勢:

基於erlang語言開發的開源軟體,具有高併發優點、支援分布式,電信領域被廣泛使用。

具有訊息確認機制、訊息持久化機制,訊息可靠性和集群可靠性高

簡單易用、執行穩定、跨平台、多語言

broker:接收和分發資訊的應用,即rabbitmq

exchange:訊息到達broker的第一站,根據型別分發到不同的queue中

queue:訊息佇列,等待消費者取走訊息的地方,基於先進先出的原則進行順序消費,可以持久化到磁碟節點伺服器,可以快取到記憶體節點伺服器

rabbitmq 單機部署

apt-cache madison rabbitmq-server  #檢視可以安裝的版本,如果版本較低配置官方源

apt list rabbitmq-server #檢視已安裝的版本

systemctl restart rabbitmq-server

systemctl enable rabbitmq-server

ps aux |

grep rabbitmq

ss -ntal

5672:消費者訪問的埠

15672:web管理埠

25672:集群狀態通訊埠

rabbitmq外掛程式管理

rabbitmq-plugins list  #檢視所有外掛程式

rabbitmq-plugins enable rabbitmq_management #開啟web介面管理外掛程式

rabbitmq-plugins version #檢視版本

rabbitmq-plugins help

#檢視幫助

rrabbitmq常用命令

rabbitmqctl --help

rabbitmqctl add_vhost ubuntu #建立vhost

rabbitmqctl delete_vhost ubuntu #刪除vhost

rabbitmqctl list_vhosts #列出所有vhosts

rabbitmqctl list_queues #列出所有列隊

rabbitmqctl add_user yun 123456 #新增使用者yun

rabbitmqctl set_user_tags yun administrator #賦予yun超級管理員許可權

rabbitmqctl set_permissions yun ".*"

".*"

".*"

#設定yun對/的vhost有讀寫許可權

rabbitmq 集群部署

rabbitmq 集群分為二種方式:

普通模式:建立好 rabbitmq 集群之後的預設模式

映象模式:把需要的佇列做成映象佇列

普通集群模式:queue建立之後,如果沒有其它policy,佇列的資料僅儲存乙份,即建立該佇列rabbitmq節點(a節點),當訊息進入a節點的queue中後,consumer從b節點拉取時,rabbitmq會臨時在a、b間進行訊息傳輸,把a中的訊息實體取出並經過b傳送給consumer,所以consumer可以連線每乙個節點,從中取訊息,該模式存在乙個問題就是當a節點故障後,b節點無法取到a節點中還未消費的訊息實體。

映象集群模式:把需要的佇列做成映象佇列,存在於多個節點,屬於rabbitmq的ha方案(映象模式是在普通模式的基礎上,增加一些映象策略)該模式解決了普通模式中的資料丟失問題,其實質和普通模式不同之處在於,訊息實體會主動在映象節點間同步,而不是在consumer取資料時臨時拉取

集群中有兩種節點型別:

記憶體節點:只將資料儲存到記憶體

磁碟節點:儲存資料到記憶體和磁碟集群中,集群至少需要乙個磁碟節點來儲存資料

vim /etc/hosts #每台mq伺服器做網域名稱解析

install rabbitmq-server=3.8.4-1 -y --fix-missing #每台伺服器進行安裝

apt list rabbitmq-server

systemctl restart rabbitmq-server

systemctl enable rabbitmq-server

ss -ntal #檢查埠

scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.13:/var/lib/rabbitmq/.erlang.cookie

scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.23:/var/lib/rabbitmq/.erlang.cookie

systemctl restart rabbitmq-server

#mq1與mq2 作為記憶體節點新增到 mq3

#mq1與mq2執行以下命令

rabbitmqctl reset

rabbitmqctl join_cluster rabbit@ubuntu3 --ram #不加--ram預設是磁碟節點

#將集群設定為映象模式,任意節點執行即可

rabbitmqctl set_policy ha-all "#"

''

rabbitmqctl cluster_status #檢視集群狀態

rabbitmq-plugins enable rabbitmq_management #各節點啟動web介面外掛程式

rabbitmqctl add_user yun 123456 #新增使用者yun

rabbitmqctl set_user_tags yun administrator #賦予yun超級管理員許可權

登入任意節點web介面 10.0.0.3:15672 yun:123456

訊息佇列Rabbitmq

rabbitmq server rabbitmqctl reset rabbitmqctl stop rabbitmqctl stop rabbitmqctl list users rabbitmqctl list queues rabbitmqctl add user user name user...

訊息佇列RabbitMQ

這是乙個很嚴肅的問題。系統之間解除耦合,可以讓不同語言編寫的系統通訊互動 保證伺服器負載不會飆公升。高大上一點就是流量削峰。讓程式變成非同步,提高響應速度。把費時任務放到另乙個程序或執行緒去執行。redis實現 剛開始學習redis時,一看這個鍊錶不就是給佇列準備的嗎?所以,一心扎進去,要寫個佇列出...

RabbitMQ訊息佇列

訊息發布接收流程 接收訊息 工作模式 publish subscribe 發布訂閱模式 發布訂閱publish subscribe和工作模式work queues的區別 routing 路由模式 區別 topics 區別 header 宣告佇列 bean queue inform sms publi...