2.基本概念

1. Connection 就是一個TCP的鏈接。Producer和Consumer都是經過TCP鏈接到RabbitMQ Server的。tcp

2.信道(channel):性能

why?爲何須要信道, 而不是使用tcp鏈接到mq?spa

全部線程只使用一條TCP鏈接以知足性能上的需求. 線程啓動後, 會在當前的鏈接上建立一條信道, 也就得到了Rabbitmq上的私密通訊路徑, 而不會給操做系統的TCP棧形成額外的負擔.操作系統

因此說, channel是創建在上述的TCP鏈接中。數據流動都是在Channel中進行的。線程

TCP鏈接就像是光纜, 而信道就像一條條獨立的光纖束.3d

TCP鏈接就像是光纜, 而信道就像一條條獨立的光纖束.blog

3.消息路由(AMQP的消息路由有三部分組成:交換器[exchange],綁定[binding],隊列[queue])隊列

消息發送到交換器, 經過必定的路由規則發送到對應的queue中, 後由監聽的consumer消費路由

4.交換器字符串

共有四種類型:direct,topic,fanout,headers.

    A.derect類型:basic_publish($msg,"exchange_name","queue_name");第一個參數是消息內容,第二個參數是交換器,第三個是路由鍵,就是你申明的queue的名稱.交換器若是參數爲空, 則會選擇空白字符串名稱的默認交換器.

    B.fanout類型:當你發送一條msg到fanout類型的交換器上, 它會把消息投遞到附加在此交換器上的全部隊列.

    C.topic模式:任何發送到Topic Exchange的消息都會被轉發到全部關聯RouteKey中指定「topic」的隊列上上

  1. 這種模式下須要RouteKey,客戶端要提早綁定Exchange與Queue。

  2. 若是Exchange沒有發現可以與RouteKey匹配的Queue,則會拋棄此消息。

  3. 客戶端在進行綁定時,要提供一個該隊列「感興趣」的主題,如「#.log.#」表示該隊列關心全部涉及log的消息(一個RouteKey爲」MQ.log.error」的消息會被轉發到該隊列)。

  4. 「#」表示0個或若干個關鍵字,「」表示一個關鍵字。如「log.」能與「log.warn」匹配,沒法與「log.warn.timeout」匹配;可是「log.#」能與上述二者匹配。

相關文章
相關標籤/搜索