rabbitmq簡介

一、AMQP

    AMQP協議是一個高級抽象層消息通訊協議,RabbitMQ是AMQP協議的實現。它主要包括如下組件:服務器

1.1 Server(broker)

    接受客戶端鏈接,實現AMQP消息隊列和路由功能的進程。架構

1.2 Virtual Host

    實際上是一個虛擬概念,相似於權限控制組,一個Virtual Host裏面能夠有若干個Exchange和Queue,可是權限控制的最小粒度是Virtual Host。併發

1.3 Exchange

    接受生產者發送的消息,並根據Binding規則將消息路由給服務器中的隊列。ExchangeType決定了Exchange路由消息的行爲,例如,在RabbitMQ中,ExchangeType有direct、Fanout和Topic三種,不一樣類型的Exchange路由的行爲是不同的。高併發

1.3.1 direct

    若是 routing key 匹配, 那麼Message就會被傳遞到相應的queue中。其實在queue建立時,它會自動的以queue的名字做爲routing key來綁定那個exchange。性能

1.3.2 fanout

    會向響應的queue廣播。spa

1.3.3 topic

    對key進行模式匹配,好比ab*能夠傳遞到全部ab*的queue。操作系統

1.4 Message Queue

    消息隊列,用於存儲還未被消費者消費的消息。線程

1.5 Message

    由Header和Body組成,Header是由生產者添加的各類屬性的集合,包括Message是否被持久化、由哪一個Message Queue接受、優先級是多少等。而Body是真正須要傳輸的APP數據。隊列

1.6 Binding

    Binding聯繫了Exchange與Message Queue。Exchange在與多個Message Queue發生Binding後會生成一張路由表,路由表中存儲着Message Queue所需消息的限制條件即Binding Key。當Exchange收到Message時會解析其Header獲得Routing Key,Exchange根據Routing Key與Exchange Type將Message路由到Message Queue。Binding Key由Consumer在Binding Exchange與Message Queue時指定,而Routing Key由Producer發送Message時指定,二者的匹配方式由Exchange Type決定。 進程

1.7 Connection

    鏈接,對於RabbitMQ而言,其實就是一個位於客戶端和Broker之間的TCP鏈接。

1.8 Channel

    信道,僅僅建立了客戶端到Broker之間的鏈接後,客戶端仍是不能發送消息的。須要爲每個Connection建立Channel,AMQP協議規定只有經過Channel才能執行AMQP的命令。一個Connection能夠包含多個Channel。之因此須要Channel,是由於TCP鏈接的創建和釋放都是十分昂貴的,若是一個客戶端每個線程都須要與Broker交互,若是每個線程都創建一個TCP鏈接,暫且不考慮TCP鏈接是否浪費,就算操做系統也沒法承受每秒創建如此多的TCP鏈接。RabbitMQ建議客戶端線程之間不要共用Channel,至少要保證共用Channel的線程發送消息必須是串行的,可是建議儘可能共用Connection。

    爲何使用Channel,而不是直接使用Connection(TCP鏈接)?

    對於OS來講,創建和關閉TCP鏈接是有代價的,頻繁的創建關閉TCP鏈接對於系統的性能有很大的影響,並且TCP的鏈接數也有限制,這也限制了系統處理高併發的能力。可是,在TCP鏈接中創建Channel是沒有上述代價的。對於Producer或者Consumer來講,能夠併發的使用多個Channel進行Publish或者Receive。

1.9 Command

    AMQP的命令,客戶端經過Command完成與AMQP服務器的交互來實現自身的邏輯。例如在RabbitMQ中,客戶端能夠經過publish命令發送消息,txSelect開啓一個事務,txCommit提交一個事務。

二、系統架構

  •  生產者將message發送到exchange。
  • exchange接受message以後,負責將其路由到具體的隊列中。
  • Bindings負責鏈接exchange和隊列(queue)。
  • message到達隊列(queue),而後等待被message接收端處理。
  • 消費者處理message。
相關文章
相關標籤/搜索