mq 概念
rabbitmqmq:message queuing,訊息佇列是高併發系統的核心元件之一,訊息佇列的目的是為了實現各個應用程式之間的通訊,這樣多個應用程式可以執行在不同的主機上,通過mq就可以實現誇網路通訊,因此 mq 實現了業務的解耦和非同步機制
訊息列隊的特點:
1,解決瞬時寫壓力大於應用服務能力導致訊息丟失、系統奔潰等問題
2,系統解耦(解決不同重要程度、不同能力級別系統之間依賴導致一死全死)
3,提公升效能與併發能力
目前主流的訊息佇列軟體有 rabbitmq、kafka、activemq、rocketmq 等
官網:
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-4wy8u7wp-1598186670378)(typora\29.png)]
rabbitmq 單機部署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:集群狀態通訊埠
rrabbitmq常用命令rabbitmq-plugins list #檢視所有外掛程式
rabbitmq-plugins enable rabbitmq_management #開啟web介面管理外掛程式
rabbitmq-plugins version #檢視版本
rabbitmq-plugins help
#檢視幫助
rabbitmq 集群部署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 集群之後的預設模式
映象模式:把需要的佇列做成映象佇列
普通集群模式: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...