rabbitmq簡介及安裝

一.rabbitmq簡介

1.RabbitMQ介紹

RabbitMQ 即一個消息隊列,主要是用來實現(xiàn)應用程序的異步和解耦,同時也能起到消息緩沖,消息分發(fā)的作用。

消息中間件最主要的作用是解耦,中間件最標準的用法是生產者生產消息傳送到隊列,消費者從隊列中拿取消息并處理,生產者不用關心是誰來消費,消費者不用關心誰在生產消息,從而達到解耦的目的。在分布式的系統(tǒng)中,消息隊列也會被用在很多其它的方面,比如:分布式事務的支持,RPC的調用等等。

RabbitMQ是實現(xiàn)AMQP(高級消息隊列協(xié)議)的消息中間件的一種,最初起源于金融系統(tǒng),用于在分布式系統(tǒng)中存儲轉發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗。RabbitMQ主要是為了實現(xiàn)系統(tǒng)之間的雙向解耦而實現(xiàn)的。當生產者大量產生數(shù)據(jù)時,消費者無法快速消費,那么需要一個中間層。保存這個數(shù)據(jù)。

AMQP,即Advanced Message Queuing Protocol,高級消息隊列協(xié)議,是應用層協(xié)議的一個開放標準,為面向消息的中間件設計。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。

RabbitMQ是一個開源的AMQP實現(xiàn),服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。


2.運行機制

通常我們談到隊列服務, 會有三個概念: 發(fā)消息者、隊列、收消息者,RabbitMQ 在這個基本概念之上, 多做了一層抽象, 在發(fā)消息者和 隊列之間, 加入了交換器 (Exchange). 這樣發(fā)消息者和隊列就沒有直接聯(lián)系, 轉而變成發(fā)消息者把消息給交換器, 交換器根據(jù)調度策略再把消息再給隊列。


左側 P 代表 生產者,也就是往 RabbitMQ 發(fā)消息的程序。

中間即是 RabbitMQ,其中包括了 交換機 和 隊列。

右側 C 代表 消費者,也就是往 RabbitMQ 拿消息的程序

那么,其中比較重要的概念有 4 個,分別為:虛擬主機,交換機,隊列,和綁定。

(1)虛擬主機:一個虛擬主機持有一組交換機、隊列和綁定。為什么需要多個虛擬主機呢?很簡單,RabbitMQ當中,用戶只能在虛擬主機的粒度進行權限控制。因此,如果需要禁止A組訪問B組的交換機/隊列/綁定,必須為A和B分別創(chuàng)建一個虛擬主機。每一個RabbitMQ服務器都有一個默認的虛擬主機“/”。

(2)交換機:Exchange 用于轉發(fā)消息,但是它不會做存儲,如果沒有 Queue bind 到 Exchange 的話,它會直接丟棄掉 Producer 發(fā)送過來的消息。? 這里有一個比較重要的概念:路由鍵(routing_key)。消息到交換機的時候,交互機會轉發(fā)到對應的隊列中,那么究竟轉發(fā)到哪個(3)隊列,就要根據(jù)該路由鍵。

(4)綁定:也就是交換機需要和隊列相綁定,這其中如上圖所示,是多對多的關系。



交換機的重要功能

交換機的功能主要是接收消息并且轉發(fā)到綁定的隊列,交換機不存儲消息,在啟用ack模式后,交換機找不到隊列會返回錯誤。交換機有四種類型:Direct, topic, Headers and Fanout

Direct:direct 類型的行為是”先匹配, 再投送”. 即在綁定時設定一個routing_key, 消息的routing_key匹配時, 才會被交換器投送到綁定的隊列中去.

Topic:按規(guī)則轉發(fā)消息(最靈活)

Headers:設置header attribute參數(shù)類型的交換機

Fanout:轉發(fā)消息到所有綁定隊列(廣播:忽略routing_key )


3.總結

RabbitMQ簡單來說,就是生產者發(fā)送消息到虛擬主機,虛擬主機把消息交給指定的交換機,交換機按照規(guī)則扔給消息隊列進行存儲,消息隊列等待消費者來消費。

由此我想到了商品買賣:廠家生產商品賣給批發(fā)部,批發(fā)部交給指定的超市出售,超市按照售價擺放在門店,并等待顧客上門購買。



二.rabbitmq在linux上的安裝

因為RabbitMQ是由erlang語言寫的,就像Java程序需要jdk環(huán)境一樣,運行RabbitMQ也需要erlang環(huán)境。


1.安裝erlang

環(huán)境:Centos7.4

下載地址:http://erlang.org/download/

在Linux終端運行命令行

下載:

wget http://erlang.org/download/otp_src_18.3.tar.gz

下載一定要認準otp_src_字樣。

解壓:

tar-zxvf otp_src_18.3.tar.gz

進入解壓后的根目錄:

./configure--prefix=/usr/local/erlang--enable-hipe--enable-threads--enable-smp-support--enable-kernel-poll--without-javac

make&&make install

上面有點慢。

把erlang加入環(huán)境變量:

vi/etc/profile

exportERLANG=/usr/local/erlang/erlangexportPATH=$ERLANG/bin:$PATH

使環(huán)境變量生效

source/etc/profile

然后,我們測試下是否安裝成功:

[root@yueshutong~]# erlErlang/OTP18[erts-7.3][source][64-bit][async-threads:10][hipe][kernel-poll:false]Eshell V7.3(abortwith^G)1>


2.安裝RabbitMQ

下載地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/

下載:

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz

對于下載xz包進行解壓,首先先下載xz壓縮工具:

yum install xz

對rabbitmq包進行解壓:

xz-d xz-d rabbitmq-server-generic-unix-3.6.1.tar.xz

tar-xvf rabbitmq-server-generic-unix-3.6.1.tar

隨后在sbin目錄啟用MQ管理方式:

./rabbitmq-plugins enable rabbitmq_management? #啟動后臺管理

./rabbitmq-server-detached #后臺運行rabbitmq

添加用戶和權限 默認網頁guest用戶是不允許訪問的,需要增加一個用戶修改一下權限,代碼如下:

添加用戶:

./rabbitmqctl add_user admin admin

添加權限:

./rabbitmqctl set_permissions-p"/"admin".*"".*"".*"

修改用戶角色:

./rabbitmqctl set_user_tags admin administrator

然后就可以遠程訪問了,然后可直接配置用戶權限等信息。


3.驗證

訪問http://ip:15672/,輸入admin用戶密碼,登錄成功!


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • RabbitMQ 原理介紹及安裝部署 標簽:RabbitMQ 安裝 簡介 RabbitMQ 是一個用 Erlang...
    神仙CGod閱讀 8,601評論 0 60
  • rabbitmq有3種模式,集群模式2種? 單機模式:即單機情況不做集群,就單獨運行一個rabbitmq而已。...
    嗷大彬彬閱讀 4,068評論 1 9
  • 什么叫消息隊列? 消息(Message)是指在應用間傳送的數(shù)據(jù)。消息可以非常簡單,比如只包含文本字符串,也可以更復...
    Agile_dev閱讀 2,386評論 0 24
  • 關于消息隊列,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個朋友聊這塊的技術選型,是時...
    預流閱讀 585,390評論 51 786
  • 關于消息隊列,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個朋友聊這塊的技術選型,是時...
    中v中閱讀 1,981評論 0 20