1. 消息隊列的歷史
瞭解一件事情的前因後果,將不會對它感到神祕。讓咱們來看看消息隊列(Message Queue)這項技術的發展歷史。正則表達式
Message Queue的需求由來已久,80年代最先在金融交易中,高盛等公司採用Teknekron公司的產品,當時的Message queuing軟件叫作:the information bus(TIB)。 TIB被電信和通信公司採用,路透社收購了Teknekron公司。以後,IBM開發了MQSeries,微軟開發了Microsoft Message Queue(MSMQ)。這些商業MQ供應商的問題是廠商鎖定,價格高昂。2001年,Java Message queuing試圖解決鎖定和交互性的問題,但對應用來講反而更加麻煩了。安全
因而2004年,摩根大通和iMatrix開始着手Advanced Message Queuing Protocol (AMQP)開放標準的開發。2006年,AMQP規範發佈。2007年,Rabbit技術公司基於AMQP標準開發的RabbitMQ 1.0 發佈。網絡
目前RabbitMQ的最新版本爲3.5.7,基於AMQP 0-9-1。
RabbitMQ採用Erlang語言開發。Erlang語言由Ericson設計,專門爲開發concurrent和distribution系統的一種語言,在電信領域使用普遍。OTP(Open Telecom Platform)做爲Erlang語言的一部分,包含了不少基於Erlang開發的中間件/庫/工具,如mnesia/SASL,極大方便了Erlang應用的開發。OTP就相似於Python語言中衆多的module,用戶藉助這些module能夠很方便的開發應用。多線程
2. AMQP messaging 中的基本概念
工具
3. 典型的「生產/消費」消息模型
生產者發送消息到broker server(RabbitMQ)。在Broker內部,用戶建立Exchange/Queue,經過Binding規則將二者聯繫在一塊兒。Exchange分發消息,根據類型/binding的不一樣分發策略有區別。消息最後來到Queue中,等待消費者取走。網站
4. Exchange類型
Exchange有多種類型,最經常使用的是Direct/Fanout/Topic三種類型。ui
Direct
Message中的「routing key」若是和Binding中的「binding key」一致, Direct exchange則將message發到對應的queue中。spa
Fanout
每一個發到Fanout類型Exchange的message都會分到全部綁定的queue上去。操作系統
Topic
根據routing key,及通配規則,Topic exchange將分發到目標queue中。線程
Routing key中能夠包含兩種通配符,相似於正則表達式:
「#」通配任何零個或多個word 「*」通配任何單個word
這裏也推薦給想要了解RabbitMQ的同窗一個網站,http://tryrabbitmq.com ,它提供在線RabbitMQ 模擬器,能夠幫助理解Exchange/queue/binding概念。
至此,咱們對於消息隊列的發展,RabbitMQ的產生,以及AMQP協議中的重要概念作了一個完整的介紹。