RabbitMQ
Linux平台安裝RabbitMQ
- docker拉取rabbitmq鏡像
docker pull rabbitmq
- 啟動容器
docker run -d --name rabbitmq2 -p 15672:15672 -p 5672:5672 c20a8529776b
- 開放端口後無法通路,進入容器中執行下面指令
docker exec -it rabbitmq /bin/bash rabbitmq-plugins enable rabbitmq_management
RabbitMQ叢集安裝
- 啟動多個容器
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' c20a8529776b
docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' c20a8529776b
docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' c20a8529776b
- 通過指令使他們加入叢集
docker exec -it myrabbit1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit docker exec -it myrabbit2 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster [email protected] rabbitmqctl start_app exit docker exec -it myrabbit3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster [email protected] rabbitmqctl start_app exit
- 配置
- name:随意取
- pattern: 隊列名字的通配符
- ha-mode:鏡像隊列提供了三種模式:
- all:全部的節點隊列都做鏡像;
- exactly:指定鏡像隊列的節點最高鏡像數量;
- nodes:隻為指定具體節點配置鏡像隊列;
- ha-sync-mode :節點之前的同步模式。有自動和手動兩種,預設是手動,這裡設定為自動。
RabbitMQ常用指令
使用者管理
- 添加使用者
#rabbitmqctl add_user zhang 123456 rabbitmqctl add_user {username} {password}
- 删除使用者
#rabbitmqctl delete_user zhang rabbitmqctl delete_user {username}
- 重置密碼
#rabbitmqctl change_password zhang 111111 rabbitmqctl change_password {username} {newpassword}
- 設定使用者角色
- administrator(超級管理者):可檢視所有資訊,并可以對使用者、政策進行操作。
- monitoring(監控者):可以檢視rabbitmq節點的相關資訊。
- policymaker(政策制定者):可以對政策進行管理,但是不可以檢視節點相關資訊。
- management(普通管理者):無法檢視節點資訊,也無法對政策進行管理。
#rabbitmqctl set_user_tags zhang administrator rabbitmqctl set_user_tags {username} {tag}
- 設定使用者可以通路的vhost
#rabbitmqctl set_permissions -p / zhang '.*' '.*' '.*' rabbitmqctl set_permissions -p / {username} '.*' '.*' '.*'
基本概念
Producer:生産者,消息的提供者
Consumer:消費者,消息的使用者
Message:消息,程式間的通信資料
Queue:隊列,消息存放的容器(先進先出)
Vhost:虛拟主機,相當于MQ中的資料庫,用于存儲隊列
RabbitMQ六種工作模式
Hello World模式
工作中不會用到該模式,隻是入門示範執行個體。
Work queues(工作隊列模式)
- 在多個消息的情況下,會将消息分派給不同的消費者,每個消費者都會接受不同的消息。可以根據消費者的性能進行權重配置。
- 特别适合在叢集環境中做異步處理,最大程度發揮每一台伺服器的性能。
Publish/Subscribe(釋出/訂閱模式)
- 生産者不再直接與隊列綁定, 而是将資料發送至“交換機Exchange”。
- 交換機Exchange用于将資料按某種規則送入與 之綁定的隊列,進而供消費者使用。
- 釋出/訂閱模式中,交換機将無差别的将所有消 息送入與之綁定的隊列,所有消費者拿到的消息 完全相同,交換機的類型被稱為fanout。
Routing(路由模式)
- 路由(Routing)模式是在釋出訂閱模式 基礎上的變種。
- 路由模式則是交換機根據Routing Key有 條件的将資料篩選後發給消費者隊列。
- 路由模式下交換機的類型被稱為direct。
Topics(主題模式)
- 主題Topic模式是在Routing模式基礎上, 提供了對RouteKey模糊比對的功能,可以 簡化程式的編寫。
- 主題模式下,模糊比對表達式規則為 : * 比對單個關鍵字 、#比對所有關鍵字。
- 主題模式下交換機的類型被稱為topic。
RPC
工作中不會使用該模式。
消息确認機制
- RabbitMQ提供了監聽器(Listener)來接收消息投遞的狀态。
- 消息确認涉及兩種狀态:Confirm與Return。
- 下面兩種狀态隻代表生産者與Broker之間消息投遞的 情況。與消費者是否接收/确認消息無關。
Confirm
Confirm代表生産者将消息送到Broker時産生的狀态,後續 會出現兩種情況:
- ack 代表Broker已經将資料接收。
- nack 代表Broker拒收消息。原因有多種,隊列已滿,限流,IO異常…
Return
u Return代表消息被Broker正常接收(ack)後,但Broker沒 有對應的隊列進行投遞時産生的狀态,消息被退回給生産者。