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可以使用通配符進行模糊匹配:
- #:匹配一個或多個詞;
- :只能匹配一個詞;
例如: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則沒有這個要求,因爲鍵值對的值可以是任何類型。