轉(zhuǎn)載請注明出處
0.目錄
RabbitMQ-從基礎(chǔ)到實(shí)戰(zhàn)(1)— Hello RabbitMQ
RabbitMQ-從基礎(chǔ)到實(shí)戰(zhàn)(2)— 防止消息丟失
RabbitMQ-從基礎(chǔ)到實(shí)戰(zhàn)(3)— 消息的交換(上)
1.簡介
本章節(jié)和官方教程相似度較高,英文好的可以移步官方教程
在上一章的例子中,我們創(chuàng)建了一個(gè)消費(fèi)者,生產(chǎn)日志消息,廣播給兩個(gè)消費(fèi)者,對消息進(jìn)行不同的處理。這一節(jié),我們將對它進(jìn)行擴(kuò)展,實(shí)現(xiàn)一些更加高級的功能,例如:使消費(fèi)者A只接受error級別的日志保存到硬盤,消費(fèi)者B接收所有級別的消息進(jìn)行打印。
本文中涉及到的所有概念(包括前面幾章),都將摒棄個(gè)人經(jīng)驗(yàn),以官方文檔為基礎(chǔ)進(jìn)行講解,在書寫本文的同時(shí),也是我對RabbitMQ的重新學(xué)習(xí)。
2.綁定
回顧一下上一章的隊(duì)列綁定代碼
// 把剛剛獲取的隊(duì)列綁定到logs這個(gè)交換中心上,
channel.queueBind(queueName, "logs", "");
這段代碼在消費(fèi)者中,為什么生產(chǎn)者沒有?因?yàn)樵赗abbitMQ中消息是發(fā)送到交換中心(exchange)的,這在上一張已經(jīng)重點(diǎn)強(qiáng)調(diào)過。
上述代碼可以理解成,queueName這個(gè)隊(duì)列對logs這個(gè)exchange中的消息感興趣,routingKey是""
在發(fā)送消息的basicPublish方法中,也有一個(gè)參數(shù)叫做routingKey,沒錯(cuò),他們是有關(guān)聯(lián)的,下面會介紹
在不同的exchange類型中,routingKey扮演的角色也相應(yīng)的不同,比如上一章我們使用的fanout(扇出,多貼切的名字,想象一下WOW中盜賊的刀扇)將忽略routingKey,所有綁定在fanout類型的exchange上的隊(duì)列,都將接收到該exchange上的所有消息。