1. 程式人生 > >RabbitMQ效能測試工具的使用

RabbitMQ效能測試工具的使用

  • RabbitMQ Broker: 也叫broker server,它是一種傳輸服務。 他的角色就是維護一條從Producer到Consumer的路線,保證資料能夠按照指定的方式進行傳輸。但是這個保證也不是100%的保證,但是對於普通的應用來說這已經足夠了。當然對於商業系統來說,可以再做一層資料一致性的guard,就可以徹底保證系統的一致性了。
  • Producer: 訊息生產者,即資料的傳送方。訊息生產者連線RabbitMQ伺服器然後將訊息投遞到Exchange。
  • Consumer:訊息消費者,即資料的接收方。訊息消費者訂閱佇列,RabbitMQ將Queue中的訊息傳送到訊息消費者。
  • Exchange:生產者將訊息傳送到Exchange(交換器),由Exchange將訊息路由到一個或多個Queue中(或者丟棄)。Exchange並不儲存訊息。RabbitMQ中的Exchange有fanout、direct、topic、headers四種類型,每種型別對應不同的路由規則,後面詳細介紹這四種類型。
  • Queue:(佇列)是RabbitMQ的內部物件,用於儲存訊息。訊息消費者就是通過訂閱佇列來獲取訊息的,RabbitMQ中的訊息都只能儲存在Queue中,生產者生產訊息並最終投遞到Queue中,消費者可以從Queue中獲取訊息並消費。多個消費者可以訂閱同一個Queue,這時Queue中的訊息會被平均分攤給多個消費者進行處理,而不是每個消費者都收到所有的訊息並處理。
  • RoutingKey:生產者在將訊息傳送給Exchange的時候,一般會指定一個routing key,來指定這個訊息的路由規則,而這個routing key需要與Exchange Type及binding key聯合使用才能最終生效。在Exchange Type與binding key固定的情況下(在正常使用時一般這些內容都是固定配置好的),我們的生產者就可以在傳送訊息給Exchange時,通過指定routing key來決定訊息流向哪裡。RabbitMQ為routing key設定的長度限制為255 bytes。
  • Connection: (連線)。Producer和Consumer都是通過TCP連線到RabbitMQ Server的。以後我們可以看到,程式的起始處就是建立這個TCP連線。
  • Channels: (通道)。它建立在上述的TCP連線中。資料流動都是在Channel中進行的。也就是說,一般情況是程式起始建立TCP連線,第二步就是建立這個Channel。
  • Exchange Types:
  • fanout:fanout型別的Exchange路由規則非常簡單,它會把所有傳送到該Exchange的訊息路由到所有與它繫結的Queue中。 生產者傳送到Exchange的所有訊息都會路由到繫結的Queue,並最終被兩個消費者消費。
  • direct:direct型別的Exchange路由規則也很簡單,它會把訊息路由到那些binding key與routing key完全匹配的Queue中。(在實際使用RabbitMQ的過程中並沒有binding key這個引數,只有routing key,為了區分我們把交換機和佇列繫結時傳的引數叫binding key,把傳送訊息時帶的這個引數叫routing key)
  • topic:前面講到direct型別的Exchange路由規則是完全匹配binding key與routing key,但這種嚴格的匹配方式在很多情況下不能滿足實際業務需求。topic型別的Exchange在匹配規則上進行了擴充套件,它與direct型別的Exchage相似,也是將訊息路由到binding key與routing key相匹配的Queue中,但direct是完全匹配,而通過topic可以進行模糊匹配routing key為一個句點號“. ”分隔的字串(我們將被句點號“. ”分隔開的每一段獨立的字串稱為一個單詞),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit” binding key與routing key一樣也是句點號“. ”分隔的字串 binding key中可以存在兩種特殊字元“”與“#”,用於做模糊匹配,其中“”用於匹配一個單詞,“#”用於匹配多個單詞(可以是零個)
  • headers:headers型別的Exchange不依賴於routing key與binding key的匹配規則來路由訊息,而是根據傳送的訊息內容中的headers屬性進行匹配。 在繫結Queue與Exchange時指定一組鍵值對;當訊息傳送到Exchange時,RabbitMQ會取到該訊息的headers(也是一個鍵值對的形式),對比其中的鍵值對是否完全匹配Queue與Exchange繫結時指定的鍵值對;如果完全匹配則訊息會路由到該Queue,否則不會路由到該Queue。