RabbotMQ: Exchange四種模式介紹

Exchange是什麼

       Exchange就是交換機,用於接收消息,並將根據路由鍵(routing key)將詳細轉發到它所綁定的消息隊列(queue);

在這裏插入圖片描述

Exchange屬性

  • name:Exchange名稱;
  • type:Exchange類型,包括direct、topic、headers和fanout;
  • Durability:是否持久化,true爲持久化;
  • Auto Delete:當最後一個綁定到該Exchange上的queue刪除後,自動刪除該Exchange;
  • Internal:當前Exchange是否用於RabbitMQ內部使用,默認爲false;
  • Arguments:擴展參數,用於AMQP協議自制定化使用;

Exchange類型

Direct Exchange:路由模式

       所有發送到direct Exchange的消息都會被轉發到routing key指定的queue中;Direct模式可以使用RabbitMQ自帶的Exchange即:Default Exchange,所以不需要講Exchange進行任何綁定操作,消息傳遞時routing key必須完全匹配才能被接收,否則被拋棄;

Topic Exchange:通配符模式

       所有發送到topic Exchange的消息都會被轉發到routing key中指定topic的queue中;
       Exchange將routing key和某個topic進行模糊匹配,此時隊列(queue)需要綁定一個topic exchange;

  • topic exchange可以使用通配符進行模糊匹配:
  1. #:匹配一個或多個詞;
  2. :只能匹配一個詞;
    例如:test.# 可以匹配到 test.aaa 和 test.aaa.bbb;
           test.
    只能匹配到 test.aaa,不能匹配到test.aaa.bbb;

在這裏插入圖片描述

Fanout Exchange:訂閱模式

       不處理routing key,只是簡單的將queue綁定到Exchange上,發送到該Exchange上的消息都會被轉發到所有與該Exchange綁定了的queue上,因此fanout exchange的效率是最高的。

Headers Exchange

       也是忽略routingKey的一種路由方式,使用headers中的鍵值對進行匹配的。Headers是一個鍵值對,可以定義成Hashtable,發送者在發送的時候定義一些鍵值對,接收者也可以在綁定時候傳入一些鍵值對,兩者匹配的話,則對應的隊列就可以收到消息。匹配有兩種方式all和any。這兩種方式是在接收端必須要用鍵值"x-mactch"來定義。all代表定義的多個鍵值對都要滿足,而any則代碼只要滿足一個就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange則沒有這個要求,因爲鍵值對的值可以是任何類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章