rabbitmq系列-基本概念理解
1.簡介
RabbitMQ是一個由erlang開發的AMQP(Advanced Message Queue protocol)的開源實現。AMQP高級消息隊列,說白了就是一個開源的消息中間件。它能解決不同組件、模塊、系統間消息通信。
2.系統架構
RabbitMQ Server: 也叫broker server,存儲消息的地方
Producer:數據的發送方
Consumer:數據的接收方
Connection: 就是一個TCP的連接。Producer和Consumer都是通過TCP連接到RabbitMQ Server的。以後我們可以看到,程序的起始處就是建立這個TCP連接。
Channels
那麽,為什麽使用Channel,而不是直接使用TCP連接?
對於OS來說,建立和關閉TCP連接是有代價的,頻繁的建立關閉TCP連接對於系統的性能有很大的影響,而且TCP的連接數也有限制,這也限制了系統處理高並發的能力。但是,在TCP連接中建立Channel是沒有上述代價的。對於Producer或者Consumer來說,可以並發的使用多個Channel進行Publish或者Receive。
3、圖解
1. 信息生產者將消息(message)發送到exchange
2. exchange接受消息之後,負責將其路由到具體的隊列中
3. Bindings負責連接exchange和隊列(queue)
4. 消息到達隊列(queue),然後等待被消息接收端處理
5. 消息接收端處理消息
Exchanges有三種類型:direct, fanout,topic。 每個實現了不同的路由算法(routing algorithm)。
Direct exchange: 如果 routing key 匹配, 那麽Message就會被傳遞到相應的queue中。其實在queue創建時,它會自動的以queue的名字作為routing key來綁定那個exchange。
Fanout exchange: 會向響應的queue廣播。
Topic exchange: 對key進行模式匹配,比如ab*可以傳遞到所有ab*的queue。
Consumer和Procuder都可以通過 queue.declare 創建queue。如果queue已經存在,也不會報錯。如果沒有,要麽發送不了消息,要麽取不到消息,所以還是都創建吧。
Bindings就是將通過Exchange將queue和routing keys綁定。
rabbitmq系列-基本概念理解