天天看點

Docker安裝RabbitMQRabbitMQ

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
               
  • 配置
    Docker安裝RabbitMQRabbitMQ
    • 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模式

Docker安裝RabbitMQRabbitMQ
工作中不會用到該模式,隻是入門示範執行個體。

Work queues(工作隊列模式)

Docker安裝RabbitMQRabbitMQ
  • 在多個消息的情況下,會将消息分派給不同的消費者,每個消費者都會接受不同的消息。可以根據消費者的性能進行權重配置。
  • 特别适合在叢集環境中做異步處理,最大程度發揮每一台伺服器的性能。

Publish/Subscribe(釋出/訂閱模式)

Docker安裝RabbitMQRabbitMQ
  • 生産者不再直接與隊列綁定, 而是将資料發送至“交換機Exchange”。
  • 交換機Exchange用于将資料按某種規則送入與 之綁定的隊列,進而供消費者使用。
  • 釋出/訂閱模式中,交換機将無差别的将所有消 息送入與之綁定的隊列,所有消費者拿到的消息 完全相同,交換機的類型被稱為fanout。

Routing(路由模式)

Docker安裝RabbitMQRabbitMQ
  • 路由(Routing)模式是在釋出訂閱模式 基礎上的變種。
  • 路由模式則是交換機根據Routing Key有 條件的将資料篩選後發給消費者隊列。
  • 路由模式下交換機的類型被稱為direct。

Topics(主題模式)

Docker安裝RabbitMQRabbitMQ
  • 主題Topic模式是在Routing模式基礎上, 提供了對RouteKey模糊比對的功能,可以 簡化程式的編寫。
  • 主題模式下,模糊比對表達式規則為 : * 比對單個關鍵字 、#比對所有關鍵字。
  • 主題模式下交換機的類型被稱為topic。

RPC

Docker安裝RabbitMQRabbitMQ
工作中不會使用該模式。

消息确認機制

  • RabbitMQ提供了監聽器(Listener)來接收消息投遞的狀态。
  • 消息确認涉及兩種狀态:Confirm與Return。
  • 下面兩種狀态隻代表生産者與Broker之間消息投遞的 情況。與消費者是否接收/确認消息無關。

Confirm

Confirm代表生産者将消息送到Broker時産生的狀态,後續 會出現兩種情況:
  • ack 代表Broker已經将資料接收。
  • nack 代表Broker拒收消息。原因有多種,隊列已滿,限流,IO異常…

Return

u Return代表消息被Broker正常接收(ack)後,但Broker沒 有對應的隊列進行投遞時産生的狀态,消息被退回給生産者。