RabbitMQ知識點整理6-exchangeDeclare方法詳解


exchangeDeclare 有多個重載方法,這些重載方法都是由下面這個方法中缺省的某些參數構成的。

Exchange.DeclareOk exchangeDeclare(String exchange,
                                              String type,
                                              boolean durable, boolean autoDelete, boolean internal, Map<String, Object> arguments) throws IOException;

方法的返回值是Exchange.DeclareOK, 用來標識成功聲明了一個交換器。

各個參數詳細說明如下:

exchange: 交換器的名稱

type: 交換器的類型, 常見類型有fanout, direct, topic, headers

durable: 設置是否持久化, true表示持久化, 反之是非持久化, 持久化可以將交換器存盤, 在服務器重啟的時候不會丟失相關信息

autoDelete: 設置是否自動刪除, true表示自動刪除, 自動刪除的前提是至少有一個隊列或者交換器與這個交換器綁定, 之后所有與這個交換器綁定的隊列或交換器都於此解綁, 注意不能錯誤的把這個參數理解為"當與此交換器連接的客戶端都斷開時, RabbitMQ會自動刪除本交換器"

internal: 設置是否內置的, true表示是內置的交換器, 客戶端程序無法直接發送消息到這個交換器中, 只能通過交換器路由到交換器這個方式

arguments: 其他一些結構化參數, 比如alternate-exchange

exchangeDeclare的其他重載方法如下:

1.Exchange.DeclareOk exchangeDeclare(String exchange, String type) throws IOException; 2.Exchange.DeclareOk exchangeDeclare(String exchange, String type, boolean durable) throws IOException; 3.Exchange.DeclareOk exchangeDeclare(String exchange, String type, boolean durable, boolean autoDelete, Map<String, Object> arguments) throws IOException; 與此對應的, 將第二個參數String type換成BuiltinExchangeType type對應的幾個重載方法如下: 1.Exchange.DeclareOk exchangeDeclare(String exchange, BuiltinExchangeType type) throws IOException; 2.Exchange.DeclareOk exchangeDeclare(String exchange, BuiltinExchangeType type, boolean durable) throws IOException; 3.Exchange.DeclareOk exchangeDeclare(String exchange, BuiltinExchangeType type, boolean durable, boolean autoDelete, Map<String, Object> arguments) throws IOException;
4.Exchange.DeclareOk exchangeDeclare(String exchange, BuiltinExchangeType type, boolean durable, boolean autoDelete, boolean internal, Map<String, Object> arguments) throws IOException;

 與exchangeDeclare方法師出同門的還有幾個方法, 比如exchangeDeclareNoWait方法, 具體定義如下(當然也有BuiltExchangeType版本的, 這里就不展開了):

void exchangeDeclareNoWait(String exchange,
                               String type,
                               boolean durable,
                               boolean autoDelete,
                               boolean internal,
                               Map<String, Object> arguments) throws IOException;

此方法比exchangeDeclare方法多設置了一個nowait參數, 這個nowait參數指的是AMQP中Exchange.Declare命令的參數, 意思是不需要服務器返回, 注意這個方法的返回是void, 而exchangeDeclare方法的返回時Exchange.DeclareOK, 意思是在客戶端聲明了一個交換器之后, 需要等待服務器的返回(服務器會返回Exchange.Declare-ok這個AMQP命令)

針對"exchangeDeclareNoWait 不需要服務器任何返回值"這一點, 考慮這樣一種情況,在聲明完一個交換器之后(實際服務器還並未完成交換器的創建) , 那么此時客戶端緊接着使用這個交換器,必然會發生異常。如果沒有特殊的緣由和應用場景,並不建議使用這個方法。

這里還有師出同門的另一個方法exchangeDeclarePassive ,這個方法的定義如下:

Exchange.DeclareOk exchangeDeclarePassive(String name) throws IOException;

這個方法在實際應用過程中還是非常有用的,它主要用來檢測相應的交換器是否存在。如果存在則正常返回:如果不存在則拋出異常: 404 channel exception ,同時Channel 也會被關閉。

有聲明創建交換器的方法,當然也有刪除交換器的方法。相應的方法如下:

1.Exchange.DeleteOk exchangeDelete(String exchange) throws IOException;
2.Exchange.DeleteOk exchangeDelete(String exchange, boolean ifUnused) throws IOException; 3.void exchangeDeleteNoWait(String exchange, boolean ifUnused) throws IOException;

其中exchange表示交換器的名稱, 而ifUnused用來設置是否在交換器沒有使用的情況下刪除, 如果設置true表示只有在此交換器沒有被使用的情況下才會被刪除, false表示無論如何這個交換器都要被刪除


免責聲明!

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



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