標籤(空格分隔): 訊息佇列 部署
單機情況下不做集群, 僅僅執行乙個rabbitmq.
# docker-compose.yml
version: '3.1'
services:
rabbitmq:
restart: always
image: rabbitmq:management
container_name: rabbitmq
ports:
- 5672:5672
- 15672:15672
environment:
tz: asia/shanghai
rabbitmq_default_user: admin
rabbitmq_default_pass: 123456
volumes:
- ./data:/var/lib/rabbitmq
預設模式,以兩個節點(rabbits01
,rabbits02
)為例來說明. 對於queue
來說,訊息實體只存在於其中乙個節點rabbit01
(或者rabbit02
),rabbit01
和rabbit02
兩個節點僅有相同的元資料,即佇列的結構. 當訊息進入rabbit01
節點的queue
後,consumer
從rabbit02
消費的時候,rabbitmq
會臨時在rabbit01
,rabbit02
之間進行訊息傳輸, 把a
中的訊息實體取出並經過b
傳送給consumer
. 所以consumer
應該盡量鏈結每乙個節點, 從中取出訊息. 即對於同乙個邏輯佇列, 要在多個節點建立物理queue
. 否則無論consumer
鏈結rabbit01
還是rabbit02
,出口總在rabbit01
這樣就會產生瓶頸, 當rabbit01
節點故障之後 ,rabbit02
無法取到rabbit01
節點中還未消費的訊息實體. 如果做了訊息持久化, 那麼得等rabbit01
節點恢復才可以被消費, 如果沒有持久化的話 就會出現訊息丟失的情況.
version: '3.1'
services:
myrabbit01:
restart: always
image: rabbitmq:management
container_name: myrabbit01
ports:
- 5672:5672
- 15672:15672
environment:
tz: asia/shanghai
rabbitmq_default_user: admin
rabbitmq_default_pass: 123456
rabbitmq_erlang_cookie: rabbitcookie
volumes:
- ./data:/var/lib/rabbitmq
hostname:
rabbit01
network_mode: bridge
version: '3.1'
services:
myrabbit02:
restart: always
image: rabbitmq:management
container_name: myrabbit02
ports:
- 5673:5672
- 15673:15672
environment:
tz: asia/shanghai
rabbitmq_default_user: admin
rabbitmq_default_pass: 123456
rabbitmq_erlang_cookie: rabbitcookie
volumes:
- ./data:/var/lib/rabbitmq
extra_hosts:
- rabbit01 myrabbit01:172.17.0.2
hostname:
rabbit02
network_mode: bridge
# 新增 集群
docker exec -it myrabbit02 bash
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit01
exit
spring:
name: spring-boot-amqp
rabbitmq:
username: admin
password: 123456
addresses: 192.168.219.151:5673,192.168.219.151:5672
把需要的佇列做成映象佇列, 這樣不管連線那個節點, 都可以順利的訪問資料, 解決了普通模式的問題.缺點也很明顯, 這樣在不同的節點內複製資料會明顯的降低系統效能, 集群內的網路頻寬會被大大的消耗掉.
映象模式首先要依賴policy
模組, 這個模組是怎麼用的呢?
rabbitmqctl set_policy ha-all "^" ''
引數意思:ha-all
-為策略名稱.^
,^zlh
為匹配名稱為zlh
的exchange
或者queue
.
ha-mode
: 為匹配型別, 他分為三種模式:all
-所有(所有的queue
),exctly
-部分(需配置ha-params
引數,此引數為int
型別比如3
,眾多集群中的隨機3
臺機器),nodes
-指定(需配置ha-params
引數,此引數為陣列型別比如["3rabbit@f","rabbit@g"]
這樣指定為f
與g
這2
臺機器。)。
現在的各種雲還是比較穩定的, 使用普通模式其實就已經夠用了.
RabbitMQ搭建高可用集群
修改主機名 首先修改 etc hostname檔案,設定主機名,然後修改hosts檔案,新增所有要進入集群的主機的主機名和ip位址的對映 root mq1 cat etc hosts 127.0.0.1 localhost 192.168.60.196 qh1 192.168.60.197 qh2 ...
RabbitMQ高可用集群介紹
主備模式 用來實現rabbitmq的高可用集群,一般是在併發和資料不是特別多的時候使用,當主節點掛掉以後會從備份節點中選擇乙個節點出來作為主節點對外提供服務。遠端模式 主要用來實現雙活,簡稱為shovel模式,所謂的shovel模式就是讓我們可以把訊息複製到不同的資料中心,讓兩個跨地域的集群互聯。映...
RabbitMQ 集群與高可用配置
此文 未實驗過 通過 erlang 的分布式特性 通過 magic cookie 認證節點 進行 rabbitmq 集群,各 rabbitmq 服務為對等節點,即每個節點都提供服務給客戶端連線,進行訊息傳送與接收。這些節點通過 rabbitmq ha 佇列 映象佇列 進行訊息佇列結構複製。本方案中搭...