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
進行安裝
安裝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,管控臺如圖所示: