阿里云 RabbitMQ 創(chuàng)建交換機(jī)報(bào)錯(cuò)
1. 報(bào)錯(cuò)信息
- RabbitMQ.Client.Exceptions.OperationInterruptedException:“The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=503, text='COMMAND_INVALID - invalid exchange type 'black'', classId=40, methodId=10”

QQ截圖20230301104234.png
解決
1. 阿里云后臺(tái)解決
-
去阿里云添加授權(quán)
QQ截圖20230301110001.png
2. 本地解決
- 我是阿里云服務(wù)器自己搭建的RabbitMQ ,所以不存在這個(gè)問(wèn)題,授權(quán)主體肯定也沒(méi)有,繼續(xù)觀(guān)察代碼
//錯(cuò)誤寫(xiě)法
string typeName = "black";
// 正確寫(xiě)法
string exchangeName ="rinaExchange1";
string typeName = "fanout";
channel.ExchangeDeclare(exchange: exchangeName, type: typeName);
-
交換機(jī)類(lèi)型名字不能亂寫(xiě),改一下就成功
QQ截圖20230301112936.png

QQ截圖20230301111625.png
-
在RabbitMQ的Exchange模式中生產(chǎn)者并不會(huì)直接把消息發(fā)送到Queue中,而是將消息發(fā)送到Exchange(交換機(jī)),消費(fèi)者創(chuàng)建各自的隊(duì)列綁定到交換機(jī).
QQ截圖20230301112344.png 然后聲明消息隊(duì)列并對(duì)交換機(jī)進(jìn)行綁定,在這里使用了隨機(jī)數(shù),目的是聲明不重復(fù)的消息隊(duì)列,如果是同一個(gè)消息隊(duì)列,則就變成worker模式,也就是說(shuō)對(duì)于發(fā)布訂閱模式有多少接收者就有多少個(gè)消息隊(duì)列,而這些消息隊(duì)列共同從一個(gè)交換機(jī)中獲取數(shù)據(jù)
然后同時(shí)開(kāi)兩個(gè)接收者,結(jié)果就如下
明細(xì)

QQ截圖20230301113340.png
-
交換機(jī)發(fā)送一條消息,下面兩個(gè)綁定的隊(duì)列(消費(fèi)者)會(huì)同時(shí)收到
QQ截圖20230301182515.png
Exchange 模式
1. 模式種類(lèi)
| 名稱(chēng) | 說(shuō)明 | 備注 |
|---|---|---|
| direct | 路由模式 | 路由模式下,在發(fā)布消息時(shí)指定不同的routeKey,交換機(jī)會(huì)根據(jù)不同的routeKey分發(fā)消息到不同的隊(duì)列中 |
| fanout | 發(fā)布訂閱模式 | 發(fā)布消息時(shí)把交換機(jī)名稱(chēng)告訴RabbitMQ,把交換機(jī)設(shè)置成fanout發(fā)布訂閱模式 |
| topic | 通配符模式 | 通配符模式和路由模式其實(shí)差不多,不同于配符模式中的路由可以聲明為模糊查詢(xún).符號(hào)“#”匹配一個(gè)或多個(gè)詞.符號(hào)“”匹配一個(gè)詞。RabbitMQ中通配符的通配符是用"."來(lái)分割字符串的.比如a.只能匹配到a.b,a.c,而a.#可以匹配到a.a.c,a.a.b. |



