8、RabbitMQ三種Exchange模式(fanout,direct,topic)的性能比較


RabbitMQ三種Exchange模式(fanout,direct,topic)的性能比較

  • RabbitMQ中,除了Simple Queue和Work Queue之外的所有生產者提交的消息都由Exchange來接受,然后Exchange按照特定的策略轉發到Queue進行存儲。
  • RabbitMQ提供了四種Exchange:fanout,direct,topic,header
  • header模式在實際使用中較少
  • **性能排序:fanout>direct>>topic。比例大約為11:10:6

Direct Exchange

  • 任何發送到Direct Exchange的消息都會被轉發到RouteKey中指定的queue

    1. 一般情況下可以使用rabbitMQ自帶的Exchange:“”(該Exchange的名字為空字符串,下文稱其為defaultExchange)。
    2. 這種模式下不需要將Exchange進行任何綁定(binding)操作。
    3. 消息傳遞時需要一個“RouteKey(其實是QueueName)”,可以簡單的理解為要發送的隊列名字。相當於上面提到的Simple Queue和Work Queue.
    4. 如果vhost中不存在RouteKey中指定的隊列名,則該消息被拋棄。

Fanout Exchange

  • 任何發送到Fanout Exchange的消息都會被轉發到與該Exchange綁定(Binding)的Queue上

    1. 可以理解為路由表的模式
    2. 這種模式不需要RouteKey
    3. 這種模式需要提前將Exchange與Queue進行綁定,一個Exchange可以綁定多個Queue,一個Queue可以同多個Exchange進行綁定
    4. 如果接受消息的Exchange沒有和任何Queue綁定,則消息被拋棄

Topic Exchange

  • 任何發送到Topic Exchange的消息都會被轉發到所有關心RouteKey中指定話題的Queue上

    1. 這種模式較為復雜,簡單來說,就是每個隊列都有其關心的主題(通過BindingKey來說明),所有的消息都帶有一個“標題”(Route Key),Exchange會將消息轉發到所有關注主題能夠和RouteKey模糊匹配的隊列。匹配規則使用通配符“#”和“*”。
    2. 這種模式需要RouteKey,也要提前綁定Exchange與Queue。綁定之后Exchange才能夠判斷隊列關心的主題是否與RouteKey匹配。
    3. 在進行綁定時,需要提供一個該隊列關系的主題,如“#.log.#”表示該隊列關系所有涉及log的消息(一個RouteKey為“MQ.log.error”的消息就會被轉發給該隊列)
    4. 同樣,如果Exchange沒有任何發現能夠與RouteKey匹配的Queue,則會拋棄該消息。
  • 引用自RabbitMQ三種Exchange模式(fanout,direct,topic)的性能比較


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM