02.RabbitMQ簡介

在介紹RabbitMQ之前,我們先了解一下消息隊列的簡史

RabbitMQ簡史

1983年孟買26歲的工程師Vivek Ranadive設想一種軟件總線,同年Teknekron誕生了。

1985年用於高盛,用於解決金融交易。於是發佈訂閱模式(PubSub)誕生了,同時還誕生了世界上第一個現代消息隊列軟件:Teknekron的The Information Bus(TIB)。

由於在那個時期金融交易行業門庭若市,因此TIB迅速傳播開來。它引起了電信特別是新聞機構的注意。這些行業也特別需要將信息及時發佈給千變萬化的客戶。這也解釋了爲什麼在1994年大型新聞機構路透社收購了Teknekron。

與此同時,這個迅猛發展的企業軟件也引起了藍色巨人的注意。畢竟IBM最大的幾位客戶都來自於金融服務行業。因此,在20世紀80年代後期,IBM開始研究開發自己的消息隊列軟件,實際開發工作始於1990年,三年後,消息隊列服務器軟件IBM MQ產品系列面世。17年後,MQ系列進化成了WebSphere MQ並統治着商業消息隊列平臺市場。

在那段時間,TIB並沒有消失在路透社腹中。相反,它仍然是企業通信市場的主要參與者。並且在1997年Teknekron以TIBCO的形式作爲一家獨立公司再度出現。同年,微軟也在消息通信市場嶄露頭角:微軟消息隊列MSMQ誕生。

通過這一系列的革新,消息隊列(MQ)軟件主要留住了大型組織機構,它們需要可靠性、解耦以及實時消息通信。爲什麼MQ不去尋找更大的市場呢?

因爲:供應商壁壘。因爲,商業MQ供應商想要解決應用互通的問題,而不是去創建標準接口來允許不同的MQ產品互通。供應商壁壘維持着足夠高的價格和利潤率,並使得這些商業MQ軟件對那些當今繁榮昌盛的初創公司和Web2.0公司來說遙不可及。

結果,中小技術公司並不是唯一一個對高價格MQ供應商感到不滿的。那些造就MQ產業的金融服務公司對此也激動不起來。越是大型的金融公司越不可避免地使用來自衆多供應商的MQ產品,來服務企業內部的不同應用。如果應用已經訂閱了TIBCO MQ消息,若突然需要消費來自IBM MQ的消息,則實現起來會非常困難。這些產品使用不同的API、不同的協議,因而毫無疑問無法聯合起來組成單一的總線。爲了解決這個問題,Java Message Service(JMS)在2001年誕生了。

JMS試圖通過提供公共Java API的方式,隱藏單獨MQ產品供應商提供的實際接口,從而跨越了壁壘和解決了互通問題。從技術上講,Java應用程序只需針對JMS API編程,選擇合適的MQ驅動即可。JMS會打理好其他部分。

問題是你在嘗試使用單獨標準化接口來膠合衆多不同的接口。這就像是把不同類型的衣服黏在一起:縫合處終究會裂開,真想會暴露出來。使用JMS的應用程序會變得更加脆弱。我們需要新的消息通信標準化方案。

2004年,救世主AMQP誕生了。AMQP從一開始就設計爲開放標準,以解決衆多的消息隊列需求和拓撲結構問題。憑藉開發,任何人都可以執行這一標準,針對標準編碼的任何人都可以和任意AMQP供應商提供的MQ服務器進行交互。

在2006年,Rabbit Technologies誕生了:其擁有着RabbitMQ的知識產權。之所以叫Rabbit這個名字,是因爲他們覺得,兔子是行動非常迅速的動物,而且繁殖起來也非常瘋狂,把它用於分佈式軟件的命名再合適不過了。

時機總是如此的恰到好處,就在此時,AMQP規範的第一份公開草案也公之於世了。作爲一份新的規範,AMQP正快速修訂。這正是Erlang可以施展拳腳的地方。通過Erlang,RabbitMQ可以快速開發並跟上AMQP標準前進的節奏。核心開發人員Tony Garnock-Jones僅僅用了兩個半月就將RabbitMQ 1.0版本開發完成了。2007年RabbitMQ 1.0版本正式面世。

此處簡短介紹下ErLang,Erlang是一個結構化,動態類型編程語言,內建並行計算支持。最初是由愛立信專門爲通信應用設計的,因此非常適合於構建分佈式,實時軟並行計算系統。使用Erlang編寫出的應用運行時通常由成千上萬個輕量級進程組成,並通過消息傳遞相互通訊。進程間上下文切換對於Erlang來說僅僅 只是一兩個環節,比起C程序的線程切換要高效得多得多了。

Erlang並非一門新語言,它出現於1987年,只是當時對併發、分佈式需求還沒有今天這麼普遍,當時可謂英雄無用武之地。Erlang語言創始人Joe Armstrong當年在愛立信做電話網絡方面的開發,他使用Smalltalk,可惜那個時候Smalltalk太慢,不能滿足電話網絡的高性能要求。但Joe實在喜歡Smalltalk,於是定購了一臺Tektronix Smalltalk機器。但機器要兩個月時間纔到,Joe在等待中百無聊賴,就開始使用Prolog,結果等Tektronix到來的時候,他已經對Prolog更感興趣,Joe當然不滿足於精通Prolog,經過一段時間的試驗,Joe給Prolog加上了併發處理和錯誤恢復,於是Erlang就誕生了。這也是爲什麼Erlang的語法和Prolog有不少相似之處。

我們再回頭來看RabbitMQ。就這樣一直到今天,RabbitMQ廣泛使用在小到初創公司,大到互聯網巨頭。其中,令創始人感到驚訝的是:Rabbit的客戶主要是技術公司而並非金融公司。同時,RabbitMQ也吸引着那些只有少量預算同時也要解決消息通信的個人或團隊。

我們在瞭解了簡史之後,接下來我們再來看下,如何搭建RabbitMQ環境

搭建RabbitMQ環境

下載地址:https://www.rabbitmq.com/download.html

Windows下安裝

1.安裝Erlang:
下載地址:https://www.erlang.org/downloads

安裝:

安裝完成。

2.安裝RabbitMQ:

安裝完成。

3.啓動管理工具

  • 打開RabbitMQ Server的安裝目錄下的 rabbitmq_server-3.7.16\sbin

  • 在此目錄下,打開cmd,並輸入命令,啓用Web管理界面
rabbitmq-plugins enable rabbitmq_management 

  此處提示Erlang沒有添加環境變量,添加Erlang環境變量後重試。

  • 啓動RabbitMQ Server

  • 訪問 http://127.0.0.1:15672

Linux(Ubuntu)下安裝

1.安裝Erlang

sudo apt-get install erlang

2.安裝RabbitMQ

sudo apt install rabbitmq-server

3.啓動、停止

sudo service rabbitmq-server start
sudo service rabbitmq-server stop
sudo service rabbitmq-server restart

4.開啓Web界面管理工具

rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart

5.解決guest用戶不允許訪問

cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/ebin
sudo vim rabbit.app

# 將 {loopback_users, [<<”guest”>>]}
# 修改爲 {loopback_users, []}
# 原因:rabbitmq從3.3.0開始,使用guest/guest權限只能通過localhost訪問

6.重啓服務,就可以訪問Web界面啦

sudo systemctl restart rabbitmq-server.service

Web管理界面咱們會在理解了RabbitMQ消息通信中的基本概念後,再詳細介紹。

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