windows下 安裝 rabbitMQ 及操做經常使用命令

RabbitMQ簡介

RabbitMQ是一個消息代理:它接受和轉發消息。你能夠把它想象成一個郵局:當你把你想要發佈的郵件放在郵箱中時,你能夠肯定郵差先生最終將郵件發送給你的收件人。在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。
RabbitMQ和郵局的主要區別在於它不處理紙張,而是接受,存儲和轉發二進制數據塊 - 消息。引自(官網介紹)。
儘管消息流經RabbitMQ,但它們只能存儲在隊列中。一個隊列只受主機內存和磁盤限制的約束,它本質上是一個很大的消息緩衝區。許多生產者能夠發送進入一個隊列的消息,而且許多消費者能夠嘗試從一個隊列接收數據。實質上是生產者——消費者關係。html

什麼叫消息隊列

消息(Message)是指在應用間傳送的數據。消息能夠很是簡單,好比只包含文本字符串,也能夠更復雜,可能包含嵌入對象。
消息隊列(Message Queue)是一種應用間的通訊方式,消息發送後能夠當即返回,由消息系統來確保消息的可靠傳遞。消息發佈者只管把消息發佈到 MQ 中而不用管誰來取,消息使用者只管從 MQ 中取消息而不論是誰發佈的。這樣發佈者和使用者都不用知道對方的存在。java

爲什麼用消息隊列

從上面的描述中能夠看出消息隊列是一種應用間的異步協做機制,那何時須要使用 MQ 呢?
以常見的訂單系統爲例,用戶點擊【下單】按鈕以後的業務邏輯可能包括:扣減庫存、生成相應單據、發紅包、發短信通知。在業務發展初期這些邏輯可能放在一塊兒同步執行,隨着業務的發展訂單量增加,須要提高系統服務的性能,這時能夠將一些不須要當即生效的操做拆分出來異步執行,好比發放紅包、發短信通知等。這種場景下就能夠用 MQ ,在下單的主流程(好比扣減庫存、生成相應單據)完成以後發送一條消息到 MQ 讓主流程快速完結,而由另外的單獨線程拉取MQ的消息(或者由 MQ 推送消息),當發現 MQ 中有發紅包或發短信之類的消息時,執行相應的業務邏輯。
以上是用於業務解耦的狀況,其它常見場景包括最終一致性、廣播、錯峯流控等等。windows

RabbitMQ 特色

RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。瀏覽器

AMQP :Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放標準,爲面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言等條件的限制。服務器

RabbitMQ 最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。具體特色包括:網絡

(1)可靠性(Reliability)
RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發佈確認。異步

(2)靈活的路由(Flexible Routing)
在消息進入隊列以前,經過 Exchange 來路由消息的。對於典型的路由功能,RabbitMQ 已經提供了一些內置的 Exchange 來實現。針對更復雜的路由功能,能夠將多個 Exchange 綁定在一塊兒,也經過插件機制實現本身的 Exchange 。分佈式

(3)消息集羣(Clustering)
多個 RabbitMQ 服務器能夠組成一個集羣,造成一個邏輯 Broker 。ide

(4)高可用(Highly Available Queues)
隊列能夠在集羣中的機器上進行鏡像,使得在部分節點出問題的狀況下隊列仍然可用。性能

(5)多種協議(Multi-protocol)
RabbitMQ 支持多種消息隊列協議,好比 STOMP、MQTT 等等。

(6)多語言客戶端(Many Clients)
RabbitMQ 幾乎支持全部經常使用語言,好比 Java、.NET、Ruby 等等。

(7)管理界面(Management UI)
RabbitMQ 提供了一個易用的用戶界面,使得用戶能夠監控和管理消息 Broker 的許多方面。

(8)跟蹤機制(Tracing)
若是消息異常,RabbitMQ 提供了消息跟蹤機制,使用者能夠找出發生了什麼。

(9)插件機制(Plugin System)
RabbitMQ 提供了許多插件,來從多方面進行擴展,也能夠編寫本身的插件。

RabbitMQ 中的概念模型——消息模型

全部 MQ 產品從模型抽象上來講都是同樣的過程:
消費者(consumer)訂閱某個隊列。生產者(producer)建立消息,而後發佈到隊列(queue)中,最後將消息發送到監聽的消費者

windows下 安裝 rabbitMQ 及操做經常使用命令

RabbitMQ 基本概念

上面只是最簡單抽象的描述,具體到 RabbitMQ 則有更詳細的概念須要解釋。上面介紹過 RabbitMQ 是 AMQP 協議的一個開源實現,因此其內部實際上也是 AMQP 中的基本概念:

windows下 安裝 rabbitMQ 及操做經常使用命令

(1)Message
消息,消息是不具名的,它由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對於其餘消息的優先權)、delivery-mode(指出該消息可能須要持久性存儲)等。
(2)Publisher
消息的生產者,也是一個向交換器發佈消息的客戶端應用程序。
(3)Exchange
交換器,用來接收生產者發送的消息並將這些消息路由給服務器中的隊列。
(4)Binding
綁定,用於消息隊列和交換器之間的關聯。一個綁定就是基於路由鍵將交換器和消息隊列鏈接起來的路由規則,因此能夠將交換器理解成一個由綁定構成的路由表。
(5)Queue
消息隊列,用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。一個消息可投入一個或多個隊列。消息一直在隊列裏面,等待消費者鏈接到這個隊列將其取走。
(6)Connection
網絡鏈接,好比一個TCP鏈接。
(7)Channel
信道,多路複用鏈接中的一條獨立的雙向數據流通道。信道是創建在真實的TCP鏈接內地虛擬鏈接,AMQP 命令都是經過信道發出去的,不論是發佈消息、訂閱隊列仍是接收消息,這些動做都是經過信道完成。由於對於操做系統來講創建和銷燬 TCP 都是很是昂貴的開銷,因此引入了信道的概念,以複用一條 TCP 鏈接。
(8)Consumer
消息的消費者,表示一個從消息隊列中取得消息的客戶端應用程序。
(9)Virtual Host
虛擬主機,表示一批交換器、消息隊列和相關對象。虛擬主機是共享相同的身份認證和加密環境的獨立服務器域。每一個 vhost 本質上就是一個 mini 版的 RabbitMQ 服務器,擁有本身的隊列、交換器、綁定和權限機制。vhost 是 AMQP 概念的基礎,必須在鏈接時指定,RabbitMQ 默認的 vhost 是 / 。
(10)Broker
表示消息隊列服務器實體。

RabbitMQ的安裝

Erlang的安裝

首先,您須要安裝支持的 Windows 版Erlang。下載並運行Erlang for Windows 安裝程序。下載地址http://www.erlang.org/downloads,我是64位的因此下載的64位版本
我用的是 otp_win64_21.0.1

安裝RabbitMQ

能夠去官網https://www.rabbitmq.com/download.html下載, 我用的 rabbitmq-server-3.7.7

PS: 這裏有個坑須要注意一下

若是你的電腦用戶是中文的, 會安裝出問題, 每次啓動了rabbitmq以後會自動停掉進程,由於中文會亂碼. 因此若是你的用戶目錄是中文的話,請按照下面的操做來
進入安裝rabbitmq的sbin目錄
windows下 安裝 rabbitMQ 及操做經常使用命令

rabbitmq-service.bat remove

set RABBITMQ_BASE=D:\CloudMusic       # 此路徑是本身配置的路徑,存放配置文件,默認是在C盤

rabbitmq-plugins enable rabbitmq_management

rabbitmq-service start

rabbitmq命令

  • 查看已有用戶及用戶的角色:
    • rabbitmqctl.bat list_users
  • 新增一個用戶:

    • rabbitmqctl.bat add_user username password

    rabbitmq-plugins.bat enable rabbitmq_management 開啓插件

    rabbitmq-service stop 中止服務
    rabbitmq-service remove 刪除服務
    rabbitmq-service install 安裝服務
    rabbitmq-service start 開啓服務

rabbitmq用戶角色可分爲五類:

(1) 超級管理員(administrator)

可登錄管理控制檯(啓用management plugin的狀況下),可查看全部的信息,而且能夠對用戶,策略(policy)進行操做。

(2) 監控者(monitoring)

可登錄管理控制檯(啓用management plugin的狀況下),同時能夠查看rabbitmq節點的相關信息(進程數,內存使用狀況,磁盤使用狀況等)

(3) 策略制定者(policymaker)

可登錄管理控制檯(啓用management plugin的狀況下), 同時能夠對policy進行管理。

(4) 普通管理者(management)

僅可登錄管理控制檯(啓用management plugin的狀況下),沒法看到節點信息,也沒法對策略進行管理。

(5) 其餘的

沒法登錄管理控制檯,一般就是普通的生產者和消費者。

咱們也給 eric 變成 「超級管理員」 角色

  • rabbitmqctl.bat set_user_tags username administrator

更改密碼

  • rabbitmqctl change_password userName newPassword
    刪除一個用戶
    • rabbitmqctl.bat delete_user username

使用瀏覽器打開 http://localhost:15672 訪問Rabbit Mq的管理控制檯,使用剛纔建立的帳號登錄系統:

默認帳號密碼爲: guest

windows下 安裝 rabbitMQ 及操做經常使用命令

權限相關命令爲:

(1) 設置用戶權限

rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP

(2) 查看(指定hostpath)全部用戶的權限信息

rabbitmqctl list_permissions [-p VHostPath]

(3) 查看指定用戶的權限信息

rabbitmqctl list_user_permissions User

(4) 清除用戶的權限信息

rabbitmqctl clear_permissions [-p VHostPath] User

相關文章
相關標籤/搜索