MQ 的诞生历程
我們要去用MQ,先來了解一下MQ 是怎么誕生的,這樣對(duì)于它解決了什么問題理解會(huì)更加深刻。大家知不知道世界上第一個(gè)MQ 叫什么名字,是什么時(shí)候誕生的?
1983 年的時(shí)候,有個(gè)在MIT 工作的印度小伙突發(fā)奇想,以前我們的軟件相互通信,都是點(diǎn)對(duì)點(diǎn)的,而且要實(shí)現(xiàn)相同的協(xié)議,能不能有一種專門用來通信的中間件,就像主板(BUS)一樣,把不同的軟件集成起來呢?于是他搞了一家公司(Teknekron),開發(fā)了世界上第一個(gè)消息隊(duì)列軟件The Information Bus(TIB)。最開始的時(shí)候,它被高盛這些公司用在金融交易里面。因?yàn)門IB 實(shí)現(xiàn)了發(fā)布訂閱(Publish/Subscribe)模型,信息的生產(chǎn)者和消費(fèi)者可以完全解耦,這個(gè)特性引起了電信行業(yè)特別是新聞機(jī)構(gòu)的注意。1994年路透社收購了Teknekron。
TIB 的成功馬上引起了業(yè)界大佬IBM 的注意,他們研發(fā)了自己的IBM MQ(IBMWesphere)。后面微軟也加入了這場(chǎng)戰(zhàn)斗,研發(fā)了MSMQ。這個(gè)時(shí)候,每個(gè)廠商的產(chǎn)品是孤立的,大家都有自己的技術(shù)壁壘。比如一個(gè)應(yīng)用訂閱了IBM MQ 的消息,如果有要訂閱MSMQ 的消息,因?yàn)閰f(xié)議、API 不同,又要重復(fù)去實(shí)現(xiàn)。為什么大家都不愿意去創(chuàng)建標(biāo)準(zhǔn)接口,來實(shí)現(xiàn)不同的MQ 產(chǎn)品的互通呢?跟現(xiàn)在微信里面不能打開淘寶頁面是一個(gè)道理(商業(yè)競(jìng)爭)。
JDBC 協(xié)議大家非常熟悉吧?J2EE 制定了JDBC 的規(guī)范,那么那么各個(gè)數(shù)據(jù)庫廠商自己去實(shí)現(xiàn)協(xié)議,提供jar 包,在Java 里面就可以使用相同的API 做操作不同的數(shù)據(jù)庫了。MQ 產(chǎn)品的問題也是一樣的,2001 年的時(shí)候,SUN 公司發(fā)布了JMS 規(guī)范,它想要在各大廠商的MQ 上面統(tǒng)一包裝一層Java 的規(guī)范,大家都只需要針對(duì)API 編程就可以了,不需要關(guān)注使用了什么樣的消息中間件,只要選擇合適的MQ 驅(qū)動(dòng)。但是JMS 只適用于Java 語言,它是跟語言綁定的,沒有從根本上解決這個(gè)問題(只是一個(gè)API)。
所以在06 年的時(shí)候,AMQP 規(guī)范發(fā)布了。它是跨語言和跨平臺(tái)的,真正地促進(jìn)了消息隊(duì)列的繁榮發(fā)展。
07 年的時(shí)候,Rabbit 技術(shù)公司基于AMQP 開發(fā)了RabbitMQ 1.0。為什么要用Erlang 語言呢?因?yàn)镋rlang 是作者M(jìn)atthias 擅長的開發(fā)語言。第二個(gè)就是Erlang 是為電話交換機(jī)編寫的語言,天生適合分布式和高并發(fā)。
為什么要取Rabbit Technologies 這個(gè)名字呢?因?yàn)橥米优艿煤芸?#xff0c;而且繁殖起來很瘋狂。
從最開始用在金融行業(yè)里面,現(xiàn)在RabbitMQ 已經(jīng)在世界各地的公司中遍地開花。國內(nèi)的絕大部分大廠都在用RabbitMQ,包括頭條,美團(tuán),滴滴(TMD),去哪兒,藝龍,淘寶也有用。
?
總結(jié)
- 上一篇: Kafka消息的可靠性
- 下一篇: MQ 的本质是什么呢?