String queue = channel.queueDeclare("test.queue").getQueue();
Rabbitmq Server 會(huì)有以下操作:
如果我們 binding的話
channel.queueBind("test.queue", "test.exchange", "test.routingkey");
上邊和默認(rèn)的Exchange進(jìn)行的binding還是會(huì)存在的
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
// RabbitMQ默認(rèn)有一個(gè)exchange,叫default exchange,它用一個(gè)空字符串表示,它是direct exchange類型
// ,任何發(fā)往這個(gè)exchange的消息都會(huì)被路由到routing key的名字對(duì)應(yīng)的隊(duì)列上,如果沒(méi)有對(duì)應(yīng)的隊(duì)列,則消息會(huì)被丟棄
// 。這就是為什么代碼中channel執(zhí)行basicPulish方法時(shí),第二個(gè)參數(shù)本應(yīng)該為routing key,卻被寫(xiě)上了QUEUE_NAME。
經(jīng)過(guò)同事lucas多次測(cè)試發(fā)現(xiàn),以前認(rèn)為RoutingKey是唯一的或由Exchange和RoutingKey決定一條唯一的由Exchange到Queue的線路是不正確的
測(cè)試結(jié)果如下:
Exchange Name | Queue Name | Routing Key |
| test.queue | test.queue |
| test.queue2 | test.queue2 |
test.exchange | test.queue | test.routingkey |
test.exchange | test.queue2 | test.routingkey |
test.exchange | test.queue | test.routingkey2 |
test.exchange1 | test.queue | test.routingkey |
由結(jié)果可以看出,由Exchange,Queue,RoutingKey三個(gè)才能決定一個(gè)從Exchange到Queue的唯一的線路。
畫(huà)張圖,不是很準(zhǔn)確
聯(lián)系客服