RabbitMQ學習(一)——初識RabbitMQ

一、理解MQ概念

1、消息中間件概況

消息隊列(Message Queue,簡稱MQ)是企業級互聯網架構的核心產品。消息隊列技術同時也是分佈式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執行–它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程序接收此消息。

在分佈式計算環境中,爲了集成分佈式應用,開發者需要對異構網絡環境下的分佈式應用提供有效的通信手段。爲了管理需要共享的信息,對應用提供公共的信息交換機制是重要的。

設計分佈式應用的方法主要有:

  • 遠程過程調用(PRC)-分佈式計算環境(DCE)的基礎標準成分之一;
  • 對象事務監控(OTM)-基於CORBA的面向對象工業標準與事務處理(TP)監控技術的組合;
  • 消息隊列(MessageQueue)-構造分佈式應用的鬆耦合方法。

這裏我們主要分析消息隊列 (Message Queue)。

消息隊列爲構造以同步或異步方式實現的分佈式應用提供了鬆耦合方法。消息隊列的API調用被嵌入到新的或現存的應用中,通過消息發送到內存或基於磁盤的隊列或從它讀出而提供信息交換。消息隊列可用在應用中以執行多種功能,比如要求服務、交換信息或異步處理等。

對於消息中間件來說主要就是實現解耦和異步處理操作。

2、常見的消息中間件

消息中間件常見的幾類消息產品(Kafka、ActiveMQ、RabbitMQ、RocketMQ):

  • RocketMQ是阿里開源的分佈式消息中間件,是純Java開發,具有高吞吐量、高可用性、適合大規模分佈式系統應用的特點,現在也加入了Apache開源項目下。
  • RabbitMQ是使用Erlang語言開發的開源消息隊列系統,基於AMQP協議來實現。AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。AMQP協議更多應用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。
  • ActiveMQ也是Apache出品的,非常流行的消息中間件。ActiveMq也是Java編寫的,相對於RabbitMQ要差一些,當整套系統如是Java開發的話,彼此配合的默契更佳。
  • Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,屬於LinkedIn開源的分佈式發佈-訂閱消息系統,目前歸屬於Apache頂級項目。作爲一個消息系統,提供了基本功能,如解耦,順序性,異步性等。同時優質的設計理念支撐高吞吐,提供O(1)時間負責度持久化能力,數據級別達到TB/PB以上,支持離線與實時處理,即與Hadoop,Storm對接,支持水平scale out。

圖1

圖2

圖片中的比較數據來自阿里的文檔分析,通過上面的比較我們可以大致瞭解基本的性能。

二、RabbitMQ的特點及安裝

1、RabbitMQ的特點

  • 可靠性
    RabbitMQ提供了多種技術可以讓你在性能和可靠性之間進行權衡。這些技術包括持久性機制、投遞確認、發佈者證實和高可用性機制。

  • 靈活的路由
    消息在到達隊列前是通過交換機進行路由的。RabbitMQ爲典型的路由邏輯提供了多種內置交換機類型。如果你有更復雜的路由需求,可以將這些交換機組合起來使用,你甚至可以實現自己的交換機類型,並且當做RabbitMQ的插件來使用。

  • 集羣
    在相同局域網中的多個RabbitMQ服務器可以聚合在一起,作爲一個獨立的邏輯代理來使用。

  • 聯合
    對於服務器來說,它比集羣需要更多的鬆散和非可靠鏈接。爲此RabbitMQ提供了聯合模型。

  • 高可用的隊列
    在同一個集羣裏,隊列可以被鏡像到多個機器中,以確保當其中某些硬件出現故障後,你的消息仍然安全。

  • 多協議
    RabbitMQ 支持多種消息協議的消息傳遞。

  • 廣泛的客戶端
    只要是你能想到的編程語言幾乎都有與其相適配的RabbitMQ客戶端。

  • 可視化管理工具
    RabbitMQ附帶了一個易於使用的可視化管理工具,它可以幫助你監控消息代理的每一個環節。

  • 追蹤
    如果你的消息系統有異常行爲,RabbitMQ還提供了追蹤的支持,讓你能夠發現問題所在。

  • 插件系統
    RabbitMQ附帶了各種各樣的插件來對自己進行擴展。你甚至也可以寫自己的插件來使用。

  • 商業支持
    可以提供商業支持,包括培訓和諮詢。

  • 大型社區
    圍繞着RabbitMQ有一個大型的社區,那兒有着各種各樣的客戶端、插件、指南等等。

2、RabbitMQ的安裝

這裏主要介紹一下linux和windows下RabbitMQ的安裝。

(1)、Linux下RabbitMQ安裝

本文的Linux系統爲Ubuntu 5.4.0-6ubuntu1~16.04.4,所以當使用apt進行安裝新版本的RabbitMQ時,除了Erlang / OTP之外的所有依賴項在新版的系統中都自帶有。

Erlang支持包

如果你使用的是Ubuntu 14.04及之前的版本話,可能需要安裝一下新的Erlang的包,如果是較高版本的系統則可以忽略該步驟。Erlang的包鏈接地址
可以通過apt-get進行安裝,也可以用Erlang包下載來安裝。

更新安裝Erlang包

sudo apt-get update
sudo apt-get install erlang
RabbitMQ安裝

在linux下有兩種方式可以進行安裝:

A、使用APT命令進行安裝

在Ubuntu下添加安裝源:

echo "deb https://dl.bintray.com/rabbitmq/debian xenial main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list

這裏的xenial爲Ubuntu16.04的發行版本名稱,如果爲Ubuntu17.10 則更改爲artful。同理trusty則爲Ubuntu 14.04。

添加公共的鑰匙到可信密鑰列表中:

wget -O- https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc | sudo apt-key add  - 

更新軟件,

sudo apt-get update

安裝RabbitMQ服務,

sudo apt-get install rabbitmq-server

安裝 RabbitMQWeb管理插件,然後重啓RabbitMQ服務。

rabbitmq-plugins enable rabbitmq_management  
service rabbitmq-server restart  

按理來說現在我們的RabbitMQ服務就已經安裝好了,但是當我們進入RabbitMQ服務安裝目錄/usr/lib/rabbitmq/bin 下,使用rabbitmqctl查看狀態時,會出現錯誤。

這裏的rabbitmqctl 是用於添加用戶和查看信息等,rabbitmq-plugins用於添加插件。

sudo ./rabbitmqctl status

如圖:
rabbitmqctl的錯誤

原因是當我們安裝時候就提示了這個問題:
error

這是因爲要與啓動的rabbitmq服務中使用的HOME一致,因爲當前登錄的用戶不一致,所以會出現這個問題。我們只需要添加HOME目錄指到 /var/lib/rabbitmq 即可。編輯rabbitmqctl添加HOME目錄。
如下圖:
修好

然後rabbitmqctl就可以查看使用了,
查看

我們其實也可以通過使用下面的命令來查看狀態:

invoke-rc.d rabbitmq-server status

還有啓動、停止命令

invoke-rc.d rabbitmq-server start
invoke-rc.d rabbitmq-server stop

注意:

rabbitmq從3.3.0開始禁止使用guest/guest權限通過除localhost外的訪問。

如果想使用guest/guest通過遠程機器訪問,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中設置loopback_users爲[],如果沒有該文件就新建一個寫入信息保存。

/etc/rabbitmq/rabbitmq.config文件完整內容如下(注意後面的半角句號):

[{rabbit, [{loopback_users, []}]}].

然後再重啓服務。

當然也可以自己添加用戶,比如添加admin/admin123用戶

sudo ./rabbitmqctl add_user admin admin123 

然後賦予該用戶所有權限:

sudo ./rabbitmqctl set_user_tags admin administrator
sudo ./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

最後我們訪問具體的ip:15672,就可以進入RabbitMQ服務的管理界面。

rabbitmq

B、使用下載包進行安裝

使用這種方式安裝,我們首先要去下載rabbitmq包,這裏有rabbitmq的釋放包,rabbitmq地址包
比如這裏我選擇rabbitmq-server-generic-unix-3.6.15.tar.xz這個包。

在/opt目錄下面新建一個rabbitmq文件夾,獲取安裝包

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

進行解壓,由於下載的文件是tar.xz文件格式的,所以使用下面的解壓命令,

tar xvJf rabbitmq-server-generic-unix-3.6.15.tar.xz

進入解壓目錄下,

cd rabbitmq_server-3.6.15

最後執行

sbin/rabbitmq-server –detached

通過ps -ef | grep rabbitmq我們可以查看到rabbitmq啓動了,如圖:
啓動

其他的配置就和上面的相同,這裏不再複述。

(2)、Windows下RabbitMQ安裝

同理也是先安裝Erlang,下載Erlang安裝包。下載地址
windows下安裝完成之後創建一個名爲ERLANG_HOME的環境變量,其值指向erlang的安裝目錄,同時將%ERLANG_HOME%\bin加入到Path中,最後打開命令行,輸入erl,如果出現erlang的版本信息就表示erlang語言環境安裝成功;
erl

然後下載windows安裝包,下載地址
安裝RabbitMQ服務,最好不要安裝到C盤默認目錄,該目錄默認有空格,在其他盤新建目錄安裝rabbitmq服務。

安裝RabbitMQ-Plugins,通過命令進入RabbitMQ安裝目錄下的sbin目錄,輸入rabbitmq-plugins enable rabbitmq_management即可安裝好插件。

管理插件

然後再重啓rabbitmq服務,可以在開始菜單先暫停服務,再重啓服務。也可以用管理員權限打開cmd,輸入下面的命令:

菜單

重新啓動服務

net stop RabbitMQ && net start RabbitMQ

安裝好服務後,進入瀏覽器輸入http://localhost:15672,輸入guest/guest進行登錄測試。

服務

由於windows下安裝比較簡單,這裏就不再敘述,詳情可以參考RabbitMQ的官方文檔,參考文檔

本文到這裏就完了,全篇文章主要對MQ的基本概念和RabbitMQ的基本知識作了簡介,後續的文章會再對RabbitMQ的基本知識再做分析。~~~–_–

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章