我快要瘋掉了竟然還有人不會在各種環(huán)境下安裝RabbitMQ,袁庭新老師帶你一文搞定
最近有很多小伙伴在后臺私信說,在不同的環(huán)境下安裝RabbitMQ總是遇到各種問題,最終導致RabbitMQ安裝失敗,怎么破?為了給大家解答這些問題,所以本文新哥就如何在ARM架構(gòu)、X86架構(gòu)和Window系統(tǒng)下安裝RabbitMQ進行詳細介紹,必須得給你安排的明明白白。
01 為什么要使用消息服務(wù)
在安裝RabbitMQ之前,先跟著新哥回顧下,我們?yōu)槭裁匆褂孟⒎?wù)?
在多數(shù)應(yīng)用尤其是分布式系統(tǒng)中,消息服務(wù)是不可或缺的重要部分,它使用起來比較簡單,同時也給我們解決了不少難題,例如異步處理、應(yīng)用解耦、流量削鋒、分布式事務(wù)管理等,使用消息服務(wù)可以讓我們實現(xiàn)一個高性能、高可用、高擴展的系統(tǒng)。接下來我們就通過實際開發(fā)中的若干場景,來分析和說明為什么要使用消息服務(wù),以及使用消息服務(wù)的好處。
1.1 異步處理
場景說明:用戶注冊后,系統(tǒng)需要將信息寫入數(shù)據(jù)庫,并發(fā)送注冊郵件和注冊短信通知。下面我們使用圖示的方式直觀展示上述場景的不同處理方式。

針對上述注冊業(yè)務(wù)的場景需求,處理方式有3種。
串行處理方式:用戶發(fā)送注冊請求后,服務(wù)器會先將注冊信息寫入數(shù)據(jù)庫,依次發(fā)送注冊郵件和短信消息,服務(wù)器只有在消息處理完畢后才會將處理結(jié)果返回客戶端。這種串行處理消息的方式非常耗時,用戶體驗不友好。
并行處理方式:用戶發(fā)送注冊請求后,將注冊信息寫入數(shù)據(jù)庫,同時發(fā)送注冊郵件和短信,最后返回給客戶端,這種并行處理的方式在一定程度上提高了后臺業(yè)務(wù)處理的效率,但如果遇到較為耗時的業(yè)務(wù)處理,仍然顯得不夠完善。
消息服務(wù)處理方式:可以在業(yè)務(wù)中嵌入消息服務(wù)進行業(yè)務(wù)處理,這種方式先將注冊信息寫入數(shù)據(jù)庫,在極短的時間內(nèi)將注冊信息寫入消息隊列后即可返回響應(yīng)信息。此時前端業(yè)務(wù)不需要理會不相干的后臺業(yè)務(wù)處理,而發(fā)送注冊郵件和短信的業(yè)務(wù)會自動讀取消息隊列中的相關(guān)消息進行后續(xù)業(yè)務(wù)處理。
1.2 應(yīng)用解耦
場景說明:用戶下單后,訂單服務(wù)需要通知庫存服務(wù)。下面我們使用圖示的方式直觀展示此需求的不同處理方式。

如果使用傳統(tǒng)方式處理訂單業(yè)務(wù),用戶下單后,訂單服務(wù)會直接調(diào)用庫存服務(wù)接口進行庫存更新,這種方式有一個很大的問題是:一旦庫存系統(tǒng)出現(xiàn)異常,訂單服務(wù)會失敗導致訂單丟失。如果使用消息服務(wù)模式,訂單服務(wù)的下訂單消息會快速寫入消息隊列,庫存服務(wù)會監(jiān)聽并讀取到訂單,從而修改庫存。相較于傳統(tǒng)方式,消息服務(wù)模式顯得更加高效、可靠。
1.3 流量削峰
場景說明:秒殺活動是流量削峰的一種應(yīng)用場景,由于服務(wù)器處理資源能力有限,因此出現(xiàn)峰值時很容易造成服務(wù)器宕機、用戶無法訪問的情況。為了解決這個問題,通常會采用消息隊列緩沖瞬時高峰流量,對請求進行分層過濾,從而過濾掉一些請求。

針對上述秒殺業(yè)務(wù)的場景需求,如果專門增設(shè)服務(wù)器來應(yīng)對秒殺活動期間的請求瞬時高峰的話,在非秒殺活動期間,這些多余的服務(wù)器和配置顯得有些浪費;如果不進行有效處理的話,秒殺活動瞬時高峰流量請求有可能壓垮服務(wù),因此,在秒殺活動中加入消息服務(wù)是較為理想的解決方案。通過在應(yīng)用前端加入消息服務(wù),先將所有請求寫入到消息隊列,并限定一定的閾值,多余的請求直接返回秒殺失敗,秒殺服務(wù)會根據(jù)秒殺規(guī)則從消息隊列中讀取并處理有限的秒殺請求。
1.4 分布式事務(wù)管理
場景說明:在分布式系統(tǒng)中,分布式事務(wù)是開發(fā)中必須要面對的技術(shù)難題,怎樣保證分布式系統(tǒng)的請求業(yè)務(wù)處理的數(shù)據(jù)一致性通常是要重點考慮的問題。針對這種分布式事務(wù)管理的情況,目前較為可靠的處理方式是基于消息隊列的二次提交,在失敗的情況可以進行多次嘗試,或者基于隊列數(shù)據(jù)進行回滾操作。因此,在分布式系統(tǒng)中加入消息服務(wù)是一個既能保證性能不變,又能保證業(yè)務(wù)一致性的方案 。
針對這種分布式事務(wù)處理的需求,下面我們以圖示的方式展示使用消息服務(wù)的處理機制。

針對上述分布式事務(wù)管理的場景需求,如果使用傳統(tǒng)方式在訂單系統(tǒng)中寫入訂單支付成功信息后,再遠程調(diào)用庫存系統(tǒng)進行庫存更新,一旦庫存系統(tǒng)異常,很有可能導致庫存更新失敗而訂單支付成功的情況,從而導致數(shù)據(jù)不一致。針對這種分布式系統(tǒng)的事務(wù)管理,通常會在分布式系統(tǒng)之間加入消息服務(wù)進行管理。上圖中,訂單支付成功后,寫入消息表;然后定時掃描消息表消息寫入到消息隊列中,庫存系統(tǒng)會立即讀取消息隊列中的消息進行庫存更新,同時添加消息處理狀態(tài);接著,庫存系統(tǒng)向消息隊列中寫入庫存處理結(jié)果,訂單系統(tǒng)會立即讀取消息隊列中的庫存處理狀態(tài)。如果庫存服務(wù)處理失敗,訂單服務(wù)還會重復掃描并發(fā)送消息表中的消息,讓庫存系統(tǒng)進行最終一致性的庫存更新。如果處理成功,訂單服務(wù)直接刪除消息表數(shù)據(jù),并寫入到歷史消息表。
新哥通過以上四種場景,給大家介紹了消息服務(wù),想必大家對為什么要使用消息服務(wù)已經(jīng)有了深入的了解。那下面就請各位跟著新哥的節(jié)奏,繼續(xù)探討如何安裝RabbitMQ。
02 RabbitMQ安裝
在使用RabbitMQ之前必須預先安裝配置,參考RabbitMQ官網(wǎng)說明,RabbitMQ支持多平臺安裝,例如Linux、Windows、MacOS、Docker等。不同架構(gòu)的芯片對應(yīng)的RabbitMQ安裝包是有區(qū)別的。目前市場上主流的芯片架構(gòu)有:X86架構(gòu)、ARM架構(gòu)、RISC-V架構(gòu)和MIPS架構(gòu)這四種。
例如,在Linux系統(tǒng)中,如果想查看CentOS版本信息,可以通過以下命令來獲取。
這里,我們以CentOS 7.X系統(tǒng)(ARM架構(gòu)和X86架構(gòu))和Windows系統(tǒng)環(huán)境為例,介紹RabbitMQ的安裝配置過程。
2.1 Erlang語言介紹
Erlang(['?:l??])是一種通用的面向并發(fā)的編程語言,它由瑞典電信設(shè)備制造商愛立信所轄的CS-Lab開發(fā),目的是創(chuàng)造一種可以應(yīng)對大規(guī)模并發(fā)活動的編程語言和運行環(huán)境。
最初是由愛立信專門為通信應(yīng)用設(shè)計的,比如控制交換機或者變換協(xié)議等,因此非常適合構(gòu)建分布式、實時軟并行計算系統(tǒng)。
Erlang運行時環(huán)境是一個虛擬機,有點像Java的虛擬機,這樣代碼一經(jīng)編譯,同樣可以隨處運行。
2.2 安裝Erlang
RabbitMQ安裝包依賴于Erlang語言包的支持,所以需要先安裝Erlang語言包,再安裝RabbitMQ安裝包。
下載Erlang時需要注意版本兼容性問題,參考官方文檔。
訪問上述鏈接后結(jié)果見下圖:

在RabbitMQ發(fā)布的所有版本中,其中支持CentOS 7.X的最高一個版本是rabbitmq-server-3.10.0-1.el7.noarch。
2.2.1 ARM架構(gòu)的CentOS虛擬機中安裝Erlang
下載ARM架構(gòu)版本的Erlang安裝包。可以從以下三個地址下載otp_src_23.3.4.11.tar.gz版本的安裝包。
https://github.com/erlang/otp/releases
https://www.erlang-solutions.com/downloads
https://erlang.org/download/otp_versions_tree.html
拷貝otp_src_23.3.4.11.tar.gz到/opt目錄。
安裝依賴環(huán)境。安裝的過程需要消耗一定的時間需耐心等待安裝“完畢”的提示。
解壓Erlang安裝包。
配置安裝目錄。
編譯、安裝Erlang。注意,make命令執(zhí)行的時間可能比較長,需耐心等待編譯完成。
打開/etc/profile配置文件,將編譯安裝的Erlang加入環(huán)境變量。
配置ERLANG_HOME安裝路徑。
使配置文件生效并使用erl命令查看Erlang的版本信息。
2.2.2?X86架構(gòu)的CentOS虛擬機中安裝Erlang
我們下載erlang-23.3.4.11-1.el7.x86_64.rpm版本的Erlang安裝包。Erlang安裝包下載地址:https://packagecloud.io/rabbitmq/erlang。

請運行安裝腳本,或在安裝此軟件包之前手動安裝倉庫。
使用wget命令下載Erlang安裝包(下載到/opt目錄下)。
安裝Erlang。
輸入"y",回車繼續(xù)安裝,等待安裝完成。
輸入"erl"命令,如果顯示版本號說明Erlang安裝成功。
如果在安裝Erlang提示“錯誤:依賴檢測失敗”解決方案見下。
(1). 如果在安裝Erlang時報如下錯誤。
(2). 在命令后面添加--nodeps --force
參數(shù)。該命令的作用是,不再分析包之間的依賴關(guān)系而直接安裝。
(3). 手動打的安裝依賴環(huán)境。
2.2.3 Windows系統(tǒng)安裝Erlang
1.下載Erlang
訪問Erlang官網(wǎng)(https://www.erlang.org),點擊【Get Erlang/OPT 24】按鈕,進入到下載頁面。

在Erlang下載頁面選擇【Download Windows installer】-【Download 64-bit Installer】選項,下載64位的Erlang安裝包。

2.安裝Erlang
雙擊otp_win64_24.3.3.exe安裝包,今入選擇組件窗口,保持選項默認,直接點擊【Next】下一步。

在選擇安裝位置窗口,自定義Erlang安裝配置。例如,安裝在D:\ProgramSoftware\erl-24.3.3目錄下。

在選擇開始菜單文件夾窗口,保持默認,點擊【Install】按鈕進行安裝。

等待Erlang的安裝完成,整個安裝過程可能需要持續(xù)三分鐘左右。

安裝完成后,點擊【Close】按鈕,關(guān)閉窗口。至此,Erlang語言包的安裝完成。

3.配置Erlang
在【高級系統(tǒng)設(shè)置】-【環(huán)境變量】-【系統(tǒng)變量】選項下,創(chuàng)建ERLANG_HOME變量名,并對此變量名指定Erlang的安裝路徑作為變量值(注意:在安裝Erlang語言包時,會在系統(tǒng)變量下會自動增加一個變量名為ERLANG_HOME的變量配置,它的配置路徑是Erlang選擇安裝的具體路徑,無須手動修改。如果此變量已自動生成,無需重復配置)。

雙擊【系統(tǒng)變量】-【Path】選項,在Path變量中添加Erlang安裝目錄下的bin配置。
4.檢測Erlang
在開始菜單找到【Erlang】選項,點擊啟動Erlang;如果顯示如下界面,則表示Erlang安裝配置成功。

或者在【命令提示符】窗口,輸入erl
命令,查看Erlang版本號;再輸入halt().
退出erl命令操作。

03 安裝Socat
ARM架構(gòu)的CentOS虛擬機中在安裝Erlang時,默認已經(jīng)安裝了Socat,因此無需重復安裝Socat。而X86架構(gòu)的CentOS虛擬機中在安裝Erlang時,默認沒有安裝Socat,因此需要手動安裝Socat。
3.1 Socat簡介
Socat是Linux下的一個多功能的網(wǎng)絡(luò)工具,名字來由是“Socket CAT”。其功能與有瑞士軍刀之稱的Netcat類似,可以看做是Netcat的加強版。
Socat的主要特點就是在兩個數(shù)據(jù)流之間建立通道,且支持眾多協(xié)議和鏈接方式。如IP、TCP、UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。Socat的官方網(wǎng)站:http://www.dest-unreach.org/socat。
3.2 Socat安裝
通過以下地址可以下載Socat安裝包:http://repo.iotti.biz/CentOS/7/x86_64。
拷貝socat-1.7.3.2-5.el7.lux.x86_64.rpm到/opt目錄。
安裝Socat。
查看Socat的版本信息。
04 安裝RabbitMQ
4.1 ARM架構(gòu)的CentOS虛擬機中安裝RabbitMQ
下載ARM架構(gòu)版本的RabbitMQ安裝包。下載地址見下。我們選擇rabbitmq-server-generic-unix-3.10.0.tar.xz版本的RabbitMQ進行下載。
拷貝rabbitmq-server-generic-unix-3.10.0.tar.xz到/opt目錄。
解壓RabbitMQ安裝包。
打開/etc/profile配置文件,配置RabbitMQ環(huán)境變量。
將RabbitMQ安裝路徑加入環(huán)境變量。
使配置文件生效并使用erl命令查看Erlang的版本信息。
啟動RabbitMQ管理插件。為了更加方便地管理RabbitMQ,需要啟動RabbitMQ的管理插件。
4.2 X86架構(gòu)的CentOS虛擬機中安裝RabbitMQ
下載rabbitmq-server-3.10.0-1.el7.noarch.rpm版本的RabbitMQ安裝包。RabbitMQ安裝包下載地址:https://packagecloud.io/rabbitmq/rabbitmq-server。

請運行安裝腳本,或在安裝此軟件包之前手動安裝倉庫。
使用wget命令下載RabbitMQ安裝包(下載到/opt目錄下)。
安裝RabbitMQ。
輸入"y",回車繼續(xù)安裝,等待安裝完成。
啟動RabbitMQ管理插件。為了更加方便地管理RabbitMQ,需要啟動RabbitMQ的管理插件。
4.3 Windows系統(tǒng)安裝RabbitMQ
4.3.1 下載RabbitMQ
訪問RabbitMQ官網(wǎng)(http://rabbitmq.com),點擊【Get Started】選項。

選擇【Download + Installation】選項,進入RabbitMQ下載頁面。

在該頁面中可以選擇第一個推薦(recommended)的rabbitmq-sever-3.9.14.exe(3.9.14版本是在編寫此教程時最新的穩(wěn)定版本)進行下載。

找到直接下載(Direct Downloads)選項,然后點擊rabbitmq-sever-3.9.14.exe進行下載。

4.3.2 安裝RabbitMQ
雙擊rabbitmq-server-3.9.14.exe安裝包,打開選擇組件窗口,保持選項默認,直接點擊【Next】下一步。

在選擇安裝位置窗口,自定義RabbitMQ安裝配置。例如,安裝在D:\ProgramSoftware\RabbitMQ Server目錄下。然后點擊【Install】進行安裝。

等待RabbitMQ的安裝完成,整個安裝過程可能需要持續(xù)三分鐘左右。

安裝完成后,點擊【Next】按鈕進入下一步操作。

完成RabbitMQ安裝后,點擊【Finish】按鈕,完成操作。

4.3.3 配置RabbitMQ
在【高級系統(tǒng)設(shè)置】-【環(huán)境變量】-【系統(tǒng)變量】選項下,創(chuàng)建RABBITQM_SERVER變量名,并對此變量名指定RabbitMQ的安裝路徑作為變量值。

雙擊【系統(tǒng)變量】-【Path】選項,在Path變量中添加RabbitMQ安裝目錄下的sbin配置。
4.3.4 啟動RabbitMQ管理插件
為了更加方便地管理RabbitMQ,需要啟動RabbitMQ的管理插件。
我們將目錄切換到RabbitMQ中的sbin目錄下。
也可點擊開始菜單中的【RabbitMQ Command Prompt (sbin dir)】菜單選項,直接切換到sbin目錄下。
執(zhí)行以下命令,啟動RabbitMQ管理插件。
03 操作RabbitMQ
3.1 RabbitMQ常用
RabbitMQ服務(wù)操作常用的命令見下。
查看RabbitMQ的進程信息。
3.2 RabbitMQ可視化效果展示
在RabbitMQ安裝的宿主機上通過瀏覽器訪問http://localhost:15672地址,查看RabbitMQ的相關(guān)信息。
首次登錄RabitMQ可視化管理頁面時需要進行用戶登錄,RabbitMQ安裝過程中默認提供了用戶名和密碼均為guest的用戶,可以使用該賬戶進行登錄。登錄成功后會進入RabbitMQ可視化管理頁面的首頁。
如果使用其他客戶端主機訪問RabbitMQ可視化管理頁面,將提示“User can only log in via localhost”錯誤,是因為默認用戶只能通過本地主機登錄,默認用戶不允許遠程連接??梢允褂米远▌?chuàng)建的RabbitMQ賬戶進行遠程登錄。
3.3 創(chuàng)建RabbitMW賬戶
添加admin用戶并設(shè)置密碼。
添加admin用戶為administrator角色(設(shè)置為管理員權(quán)限)。
設(shè)置admin用戶的權(quán)限,將admin設(shè)置為遠端登錄。
查看用戶權(quán)限。
查看vhost(/)允許哪些用戶訪問。
查看用戶列表。
修改用戶密碼。
04 總結(jié)回顧
關(guān)于如何在ARM架構(gòu)、X86架構(gòu)和Window系統(tǒng)下如何安裝RabbitMQ新哥就給大家介紹完了,各位小伙伴可以根據(jù)自己的實際開發(fā)場景參考安裝。然后我們又給大家介紹了RabbitMQ的基本操作,主要包括RabbitMQ的基本常用命令、RabbitMQ可視化效果展示、以及如何通過命令來創(chuàng)建RabbitMQ賬戶等內(nèi)容。
今天新哥就給大家介紹到這里,現(xiàn)在你學會了嗎?關(guān)注「袁庭新」,干貨天天都不斷!
