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());
隊列的配置
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 信道都可以訪問。
其他連接無法再申明相同名稱的隊列。
使用場景:系統內部的跨進程調用。生產者和消費者在同一系統內的連接中。

