1. 程式人生 > 程式設計 >RabbitMQ學習(概念以及安裝教程)

RabbitMQ學習(概念以及安裝教程)

主流訊息佇列介紹

ActiveMQ

1)ActiveMQ是Apache出品,最流行的,能力強勁的開源訊息匯流排,並且是一個完全支援JMS(Java Message Service)規範的訊息中介軟體。

2)其豐富的API、多種叢集構建模式使得他稱為業界老牌訊息中介軟體,在中小型企業中應用廣泛!

3)MQ衡量指標:服務效能、資料儲存、叢集架構。

叢集架構模式

KAFKA

Kafka是Linkedln開源的分散式釋出-訂閱訊息系統,目前歸屬於Apache頂級專案。Kafka主要特點是基於Pull的模式來處理訊息消費,追求高吞吐量,一開始的目的就是用於日誌收集和傳輸。0.8版本開始支援複製,不支援事務,對訊息的重複、丟失、錯誤

沒有嚴格要求,適合產生大量資料的網際網路服務的資料收集業務。

叢集模式

RocketMQ

RocketMQ是阿里開源的訊息中介軟體,目前也已經孵化為Apache頂級專案,它是純Java開發,具有高吞吐量、高可用性、適合大規模分散式系統應用的特點。RocketMQ思路起源於Kafka,它對訊息的可靠性傳輸及事務性做了優化,目前在阿里集團被廣泛應用於交易、充值、流計算、訊息推送、日誌流式處理、binglog分發等場景。

叢集架構

RabbitMQ

RabbitMQ是使用Erlang語言開發的開源訊息佇列系統,基於AMQP協議來實現。AMQP的主要特徵是面向訊息、佇列、路由(包括點對點和釋出/訂閱)、可靠性、安全。AMQP協議更多用在企業系統內,對資料一致性、穩定性和可靠性要求很高的場景,對效能和吞吐量的要求在其次。

叢集架構

初始RabbitMQ

rabbitmq擁有數萬使用者,是最受歡迎的開源訊息代理之一。從T-Mobile到Runtastic,RabbitMQ在全球範圍內用於小型初創企業和大型企業。

rabbitmq重量輕,易於在內部和雲中部署。它支援多種訊息協議。rabbitmq可以部署在分散式和聯合配置中,以滿足高規模、高可用性要求。

rabbitmq執行在許多作業系統和雲環境中,併為最流行的語言提供廣泛的開發工具。

RabbitMQ高效能的原因

1)Erlang語言最初是交換機領域的架構模式,這樣使得RabbitMQ在Broker之間進行資料互動的效能是非常優秀的。

2)Erlang的優點:Erlang有著和原生Socket一樣的延遲。

什麼是AMQP高階訊息佇列協議?

AMQP全稱:Advanced Message Queuing Protocol.

AMQP翻譯:高階訊息佇列協議。

AMQP定義:是具有現在特徵的二進位制協議。是一個提供統一訊息服務的應用層標準高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體設計。

AMQP協議模型

AMQP核心概念

Server:又稱Broker,接受客戶端的連線,實現AMQP實體服務。

Connection:連線,應用程式與Broker的網路連線。

Channel:網路通道,幾乎所有的操作都在Channel中進行,Channel是進行訊息讀寫的通道。客戶端可建立多個Channel,每個Channel代表一個會話任務。

Message:訊息,伺服器和應用程式之間傳送的資料,由Properties和Body組成。Properties可以對訊息進行修飾,比如訊息的優先順序、延遲等高階特性;Body則就是訊息體內容。

Virtual host:虛擬地址,用於進行邏輯隔離,最上層的訊息路由。一個Virtual Host裡面可以有若干個Exchange和Queue,同一個Virtual Host裡面不能有相同名稱的Exchange和Queue。

Exchange:交換機,接收訊息,根據路由鍵轉發訊息到繫結的佇列。

Binding:Exchange和Queue之間的虛擬連線,binding中可以包含routing key。

Routing key:一個路由規則,虛擬機器器可用它來確定如何路由一個特定訊息。

Queue:也稱為Message Queue,訊息佇列,儲存訊息並將它們轉發給消費者。

RabbitMQ的整體架構

流轉過程:

RabbitMQ安裝與使用

開啟官網

點選右側2,進入下載頁面。

下載RPM版本。

下載erlang

1)使用命令:

cd /etc/yum.repos.d

vi rabbitmq_erlang.repo

新增內容:

# In /etc/yum.repos.d/rabbitmq_erlang.repo
[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
複製程式碼

2)使用命令:yum -y install erlang進行安裝

參考網址:github.com/rabbitmq/er…

安裝Socat

下載地址:centos.pkgs.org/7/centos-x8…

使用命令rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm安裝。

安裝RabbitMQ

使用命令rpm -ivh rabbitmq-server-3.7.17-1.el7.noarch.rpm安裝rabbitmq。可以發現已經安裝成功。

使用命令rpm -ql rabbitmq-server-3.7.17-1.el7.noarch可以檢視檔案位置。

主要檔案目錄:/usr/sbin

配置RabbitMQ

使用命令vi /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.17/ebin/rabbit.app編輯配置檔案。配置檔案為json格式。

埠號

rabbitmq埠號為5672,如圖所示。

loopback_users引數

修改loopback_users引數如下圖所示,去掉<<>>,只保留陣列。

儲存退出。

RabbitMQ的使用

服務的啟動:rabbitmq-server start &

服務的停止:rabbitmqctl stop_app

管理外掛:rabbitmq-plugins enable rabbitmq_management

訪問地址:http://ip:15672

啟動

進入/usr/sbin目錄,使用服務啟動命令,啟動成功:

由於日誌檔案跟主機名有關,故修改主機名:

vi /etc/hostname

將字串改為自己想要取的名字。

同時,使用命令vi /etc/hosts,修改域名繫結關係,如圖所示:

儲存退出,重啟生效。

使用命令lsof -i:5672,可以看到rabbitmq已經啟動成功。

啟用視覺化外掛

使用命令rabbitmq-plugins enable rabbitmq_management

在瀏覽器中輸入ip:15672,結果如圖所示:

使用者名稱和密碼統一輸入guest,管控臺如圖所示: