消息隊列-RabbitMQ的交換機和隊列配置


RabbitMQ的交換機和隊列配置

打開rabbitmq的管理頁面,可以手動新增Exchange 交換機和 Queue隊列

1、Exchange交換機配置說明:

 

 

rabbitmq創建了指定name的交換機后,不允許對其進行改變,否則會報錯。

類似報錯信息請查看鏈接:https://www.cnblogs.com/wang-yaz/p/10980607.html

 

Virtual Host,name是常用屬性

Virtual Host:

  表示 這個交換機屬於哪個虛擬目錄。一個虛擬目錄下 exchange的名字不能重復。

  而在不同虛擬目錄下可以有同名的exchange交換機。 類似於不同的文件夾概念。

Type: 交換機的類型,常見的有fanout、direct、topic、headers這四種

  具體解釋請看:https://www.cnblogs.com/gne-hwz/p/10717473.html

java學習-消息隊列rabbitmq的組成 

Durability: 持久化特性 (transient 臨時的, durable 持久化的), 默認為持久化
Auto Delete : 是否自動刪除, 默認為false
    true:當沒有消費者連接時,隊列會被刪除,期間生產者發送到隊列的消息會丟失
    false:沒有消費者連接時,隊列不會被刪除,期間生產者發送到隊列的消息不會丟失

internal:設置是否是RabbitMQ內部使用,默認false。如果設置為 true ,
  則表示是內置的交換器,客戶端程序無法直接發送消息到這個交換器中,只能通過交換器路由到交換器這種方式。

Arguments :表示其他自定義參數。

alternate-exchange:
如果無法通過其他方式路由到此交換的消息,請將它們發送到此處指定的備用交換。
 (設置“替代交換”參數。)

 

  

在java代碼中定義交換機方式:

DirectExchange(String name, boolean durable, boolean autoDelete, Map<String, Object> arguments)

    /**
     * 聲明直連交換機的bean, 該bean名稱為:testDirectExchange
     * AbstractExchange(String name, boolean durable, boolean autoDelete)
     * this(name, true, false);
     * 默認情況下,交換機是持久化,且不會自動刪除
     * @return
     */
    @Bean
    public DirectExchange testDirectExchange(){
        // 直連消息隊列參數,指定備用交換機,當testDirectExchange交換機不能用時,會將消息發送到testDirectExchange_alternate交換機上
        Map<String, Object> otherArguments = new HashMap<>(1);
        otherArguments.put("alternate-exchange", "testDirectExchange_alternate");
        return new DirectExchange("testDirectExchange", true, false,  otherArguments);
    }

 

上面是在SpringBoot中的交換機定義聲明方式。 具體可以查看類 org.springframework.amqp.rabbit.core.RabbitAdmin

底層實現是,使用 Channel發送交換機定義請求

channel.exchangeDeclare(exchange.getName(), exchange.getType(), exchange.isDurable(),
        exchange.isAutoDelete(), exchange.isInternal(), exchange.getArguments());

 

 

隊列的配置

 

 

 

name:隊列名稱
virtual host:虛擬目錄
Durability: 持久化特性 (transient 臨時的, durable 持久化的)
Auto Delete : 是否自動刪除
true:當沒有消費者連接時,隊列會被刪除,期間生產者發送到隊列的消息會丟失
false:沒有消費者連接時,隊列不會被刪除,期間生產者發送到隊列的消息不會丟失
 
arguments: 其他參數
x-message-ttl
  消息的最大存活時間,單位毫秒, 當超過時間后消息會被丟棄
默認消息存活時間為永久存在 x
-expires   隊列過期時間,當auto delete設置為true時,才會生效 x-max-length   隊列存放最大就緒消息數量,超過限制時,從頭部丟棄消息
默認最大數量限制與操作系統有關。 x
-max-length-bytes   隊列存放的所有消息總大小,超過限制時,從頭部丟棄消息 x-overflow 消息超出最大數量時,溢出行為: drop-head 或 reject-publish (drop-head:頭部丟棄, reject-publish拒絕生產者發布消息) x-dead-letter-exchange 當隊列滿時,被拒絕的消息,或者消息過期時,將被重新發布到死信交換機上。 x-dead-letter-routing-key 消息被發布到死信交換機時,如果沒設置這個路由鍵,則將使用消息的原始路由鍵, 比如,消息發送到 exchange=contract.exchange 路由鍵 routeKey = contract.info 當該隊列滿時,如果 x-dead-letter-exchange=contract.dead.exchange 沒有指定x-dead-letter-routing-key時,會將消息發送到隊列為 exchange=contract.dead.exchange routeKey = contract.info 消息的原始路由鍵即時,消息原本要發送到的隊列綁定路由鍵名 x-max-priority: 隊列支持的消息最大優先級數,沒設置時,隊列不支持消息優先級 x-queue-mode:lazy 將隊列設置為惰性模式,將消息保存在磁盤上,如果沒設置,將保存內存緩存上以盡快傳遞消息 x-queue-master-locator 將隊列設置為 master 位置模式,確定隊列 master 在節點集群上聲明時的定位規則。

 

隊列配置,除了上面的參數外,

隊列還有一個配置參數: exclusive 排他隊列

當exclusive = true 時,

只針對首次申明它的 connection 連接可見。並且在連接斷開時自動刪除。

當前 connection下的 channel 信道都可以訪問。

其他連接無法再申明相同名稱的隊列。

使用場景:系統內部的跨進程調用。生產者和消費者在同一系統內的連接中。


免責聲明!

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



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