RabbitMQ安裝配置使用指南

一、概述

RabbitMQ是一個由erlang開發的AMQPAdvanced Message Queuing Protocol)的開源實現。AMQP,即高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。

RabbitMQ是由RabbitMQ Technologies Ltd開發並且提供商業支持的。服務器端是用Erlang語言編寫,支持多種客戶端。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面具有良好的表現。

二、應用場景

對於一個大型的軟件系統來說,它會有很多的組件或者說模塊或者說子系統或者(subsystem or Component or submodule)。那麼這些模塊的如何通信?這和傳統的IPC有很大的區別。傳統的IPC很多都是在單一系統上的,模塊耦合性很大,不適合擴展(Scalability);如果使用socket那麼不同的模塊的確可以部署到不同的機器上,但是還是有很多問題需要解決。比如:

 

 1)信息的發送者和接收者如何維持這個連接,如果一方的連接中斷,這期間的數據如何方式丟失?

 2)如何降低發送者和接收者的耦合度?

 3)如何讓優先級高的接收者先接到數據?

 4)如何做到負載均衡?有效均衡接收者的負載?

 5)如何有效的將數據發送到相關的接收者?也就是說將接收者訂閱的不同數據,如何做有效的過濾。

 6)如何做到可擴展,甚至將這個通信模塊發到cluster上?

 7)如何保證接收者接收到了完整,正確的數據?

  AMDQ協議解決了以上的問題,而RabbitMQ實現了AMQP

三、服務結構

rabbitmq的框架如下:

wKioL1i3fKHTaFOfAABhl4jvjEQ200.png

幾點解釋:

rabbitmq server:是一種傳輸服務,維護從生產者到消費者的二路線,保證數據能按照指定方式進行傳輸。

clientAclientB:即爲生產者,數據的發送方。有兩部分:payload(有效載荷)和label(標籤),payload是傳輸的數據,label是標籤,用於描述數據。而rabbitmq也是通過label來決定把信息發送給哪個消費者。

client1client2client3:即爲消費者,數據的接收方。當信息到達隊列之後,rabbitmq會依次發送給每一個訂閱此信息的消費者,發送給消費者時會刪掉信息的標籤,對消費者來說自己不知道誰發送的信息。特定情況比如發送的數據包含生產者的信息時另當別論。

 

數據從生產者到消費者的傳遞,有幾個概念:exchanges, queuesbindings

Exchanges(交換器):是生產者發佈信息的地方,由exchange將消息路由到一個或多個隊列中。

queue(隊列):是rabbitmq的內部對象,用於存儲消息,rabbitmq中的消息都只能存儲在隊列中,生產者的消息最終都到queue中,消費者可根據訂閱從queue中獲取消息。

binding(綁定):通過bindingexchangequeue關聯起來,這樣rabbitmq就知道如何正確地將消息路由到指定的隊列了。

 

需要知道的兩個概念:

connection:生產者和消費者之間,使用TCP進行連接到rabbitmqserver的。

channels:虛擬連接,在TCP連接中,數據流是在channel中進行的。

 

四、應用安裝指南

安裝環境:CentOS6.8

4.1 安裝erlang

安裝rabbitmq需要先安裝erlangerlang是一種解釋語言,可直接在rabbitmq官網中下載到(但可能不是最新版本)。地址: http://www.rabbitmq.com/releases/erlang/

wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el6.x86_64.rpm
rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm

4.2 安裝rabbitmq

  1. 導入rabbitmq公鑰

首先導入rabbitmq的公鑰,不安裝密鑰的話安裝rabbitmq會報錯

報錯:warning: rabbitmq-server-3.6.6-1.el6.noarch.rpm: Header V4 RSA/SHA1Signature, key ID 6026dfca: NOKEY

rpm --import http://www.rabbitmq.com/rabbitmq-release-signing-key.asc
  1. 安裝rabbitmq

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

本次下載的是3.6.6版本

wget rpm -ivh rabbitmq-server-3.6.6-1.el6.noarch.rpm

安裝過程中可能會報錯,如:

error: Faileddependencies:

        socat is needed byrabbitmq-server-3.6.6-1.el6.noarch

原因是缺少socat包,安裝即可(需要epel擴展源):

yum install socat

此次安裝使用的不是全新的系統,有部分相關包已經安裝完,故實際操作中根據實際問題安裝相應的依賴包。

 

  1. 配置變量

默認的變量可以在日誌裏查看到,日誌在/var/log/rabbitmq/下,有四個文件,查看[email protected]前面的幾行,有相關變量的說明,如:


node           : rabbit@rabbit01

home dir       : /var/lib/rabbitmq      

config file(s) :/etc/rabbitmq/rabbitmq.config

cookie hash    : +aRq6ISnMthDGwICCmjvGw==

log            : /var/log/rabbitmq/[email protected]

sasl log       : /var/log/rabbitmq/[email protected]

databasedir   : /var/lib/rabbitmq/mnesia/rabbit@rabbit01

 

設置環境變量可以創建一個rabbitmq-env.conf文件,rabbitmq的環境變量都是有“RABBITMQ_”這樣的前綴的,在配置文件裏配置變量時要把前綴去掉,如:

#Rename the node

NODENAME=rabbit@rabbit01

#Config file location and new filename bunnies.config

CONFIG_FILE=/etc/rabbitmq/

 

一般情況,不需要設置環境變量,使用默認就可以,除非有非標準的需求。

 

  1. 配置文件

配置文件的示例文件在/usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example,可以拷貝到/etc/rabbitmq/下並改名將example去掉:

cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

          此配置文件的內容爲示例內容,可根據需求進行改動

相關參數可參考官方文檔:http://www.rabbitmq.com/configure.html#configuration-file

  1. 端口訪問設置

rabbitmq的端口比較多,系統的一些防護機制很可能會有影響,比如selinuxiptables等,以下端口是默認端口:

4369[empd]:是erlang集羣節點間端口映射的守護進程,負責維護集羣內的節點連接,提供節點名稱到IP地址及端口的解析服務。

5672, 5671tcpssl的偵聽端口

25672:管理插件端口,默認是AMQP端口+20000

1883, 8883:如果MQTT啓用的話會用到此端口,MQTT(消息隊列遙測傳輸,是一個即時通訊協議)

 

 

  1. 系統層的參數修改

在生產上,可能會有大併發連接和隊列,使用系統默認的最大打開文件數可能不足以應付高併發,所以需要將最大打開文件數做修改,默認爲1024,可用ulimit -n查看,一般情況設置爲4096就足以滿足大多數工作負載:

ulimit -S -n 4096


 


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