天天看點

RabbitMQ消息隊列叢集

mq(message queue,消息隊列)是一款消息中間件,一般以叢集方式部署,主要提供消息的接受和發送,實作各微服務之間的消息異步。

rabbitmq 是依據erlang的分布式特性(rabbitmq底層是通過erlang架構來實作的,是以rabbitmqctl會啟動erlang節點,并基于erlang節點來使用erlang系統連接配接rabbitmq節點,在連接配接過程中需要正确的erlang cookie和節點名稱,erlang節點通過交換erlang cookie以獲得認證)來實作的,是以部署rabbitmq分布式叢集時要先安裝erlang,并把其中一個服務的cookie複制到另外的節點。 rabbitmq叢集中,各個rabbitmq為對等節點,即每個節點均提供給用戶端連接配接,進行消息的接收和發送。節點分為記憶體節點和磁盤節點,一般的,均應建立為磁盤節點,為了防止機器重新開機後的消息消失;

rabbitmq的cluster叢集模式一般分為兩種, 普通模式和鏡像模式 。消息隊列通過rabbitmq ha鏡像隊列進行消息隊列實體複制。

普通模式下, 以兩個節點(rabbit01、rabbit02)為例來進行說明。對于queue來說,消息實體隻存在于其中一個節點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的中繼資料,即隊列的結構。當消息進入rabbit01節點的queue後,consumer從rabbit02節點消費時,rabbitmq會臨時在rabbit01、rabbit02間進行消息傳輸,把a中的消息實體取出并經過b發送給consumer。是以consumer應盡量連接配接每一個節點,從中取消息。即對于同一個邏輯隊列,要在多個節點建立實體queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會産生瓶頸。

鏡像模式下, 将需要消費的隊列變為鏡像隊列,存在于多個節點,這樣就可以實作rabbitmq的ha高可用性。作用就是消息實體會主動在鏡像節點之間實作同步,而不是像普通模式那樣,在consumer消費資料時臨時讀取。缺點就是,叢集内部的同步通訊會占用大量的網絡帶寬。

RabbitMQ消息隊列叢集

broker:它提供一種傳輸服務,它的角色就是維護一條從生産者到消費者的路線,保證資料能按照指定的方式進行傳輸

exchange:消息交換機,它指定消息按什麼規則,路由到哪個隊列

queue:消息的載體,每個消息都會被投到一個或多個隊列

binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來

routing key:路由關鍵字,exchange根據這個關鍵字進行消息投遞

vhost:虛拟主機,一個broker裡可以有多個vhost,用作不同使用者的權限分離

producer:消息生産者,就是投遞消息的程式

consumer:消息消費者,就是接受消息的程式

channel:消息通道,在用戶端的每個連接配接裡,可建立多個channel

主機名

作業系統

ip位址

用途

rabbitmq01

centos 7.4 x86_64

192.168.96.41

磁盤節點

rabbitmq02

centos 7.4.x86_64

192.168.96.42

記憶體節點

rabbitmq03

192.168.96.43

RabbitMQ消息隊列叢集
vim /etc/hosts
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集
RabbitMQ消息隊列叢集

繼續閱讀